私は、vhostでSetEnvを使用して、コードが開発、ベータ、または本番で実行されているかどうかを定義するApacheサーバーのセットアップを使用しています。実際のWebアプリケーションはColdfusion 8/JRunで実行されています。次のコードを使用して、仮想ホストに値を設定しました。
<VirtualHost *:80>
...
SetEnv COLDFUSION_ENVIRONMENT development
...
</VirtualHost>
アプリはこの値を問題なく読み取ります。ただし、FirefoxでModify Headersプラグインを使用して、COLDFUSION_ENVIRONMENTという名前のヘッダーを別の値で送信するとします。 foobarの場合、vhostで定義された値ではなく、ブラウザーからの値がアプリケーションで使用されます。もちろん問題は、なぜ、どうすればこれを防ぐことができるかということです。アプリが実行されているサーバーを判別するために環境変数を使用することはかなり一般的であるように思われるので、これが実際にそれを行う方法である場合、それはオプションを開くので、私にはかなり大きなセキュリティホールのように見えますプロダクションサーバーで開発モードに切り替えます... Coldfusionでこれを行うための他のベストプラクティスの方法はありますか?
更新:
SetEnvの代わりに以下を使用することで、元の問題を回避することができました。
<VirtualHost *:80>
...
RequestHeader set COLDFUSION_ENVIRONMENT development
...
</VirtualHost>
ただし、それでもハックのように感じます。ヘッダーとして送信した場合、Coldfusionが基本的にSetEnv値を無視する理由と、ベストプラクティスがあるかどうかを知りたいと思います。
CGIスコープのCFDUMPでチェックするだけで、カスタムEnv変数は出力されません。事前定義されたcgi変数のリストのみをダンプします。