我正在使用Apache服务器设置,我们要使用vhost中的SetEnv来定义代码是否在开发,testing版或生产环境中运行。 实际的Web应用程序正在Coldfusion 8 / JRun上运行。 我使用下面的代码在vhost中设置了值:
<VirtualHost *:80> ... SetEnv COLDFUSION_ENVIRONMENT development ... </VirtualHost>
该应用程序读取这个值就好了。 但是,如果我使用Firefox中的“修改头文件”插件将名为COLDFUSION_ENVIRONMENT的头文件与另一个值(例如foobar)一起发送,则来自浏览器的值将在应用程序中使用,而不是在vhost中定义的值。 当然问题是为什么以及如何防止这个问题? 使用环境variables似乎是相当普遍的,以确定哪个服务器上运行的应用程序,所以如果这确实是这样做的,它看起来像一个非常大的安全漏洞,因为它会打开选项切换到生产服务器上的开发模式…有没有其他的最佳做法在Coldfusion中做到这一点?
更新:
我能够通过使用以下而不是SetEnv解决原始问题:
<VirtualHost *:80> ... RequestHeader set COLDFUSION_ENVIRONMENT development ... </VirtualHost>
然而,它仍然感觉像一个黑客,我仍然想知道为什么ColdFusion基本上忽略SetEnv的价值,如果你把他们作为一个头,也如果有一个最佳做法与否。
你只是简单地检查CGI范围的CFDUMP,那么它不会输出自定义的Envvariables。 它只会转储一个预定义的cgi vars列表。