为什么通过修改浏览器中的标头可以更改 SetEnv 设置的值

为什么通过修改浏览器中的标头可以更改 SetEnv 设置的值

我正在使用 Apache 服务器设置,我们想在 vhost 中使用 SetEnv 来定义代码是在开发、测试版还是生产环境中运行。实际的 Web 应用程序正在运行Coldfusion 8/JRun。我使用以下代码在 vhost 中设置了该值:

<VirtualHost *:80>
...
SetEnv COLDFUSION_ENVIRONMENT development 
...
</VirtualHost>

应用程序可以正常读取此值。但是,如果我使用 Firefox 中的修改标头插件发送名为 COLDFUSION_ENVIRONMENT 的标头,其中包含另一个值(例如 foobar),则应用程序中将使用来自浏览器的值,而不是 vhost 中定义的值。当然,问题是为什么以及如何防止这种情况发生?使用环境变量似乎很常见,以确定应用程序在哪个服务器上运行,因此,如果这确实是这样做的方法,那么在我看来,这似乎是一个非常大的安全漏洞,因为它会打开在生产服务器上切换到开发模式的选项……在 Coldfusion 中还有其他最佳实践方法可以做到这一点吗?

更新:

我可以通过使用以下命令(而不是 SetEnv)来解决原始问题:

<VirtualHost *:80>
...
RequestHeader set COLDFUSION_ENVIRONMENT development
...
</VirtualHost>

但是,它仍然感觉像是一种黑客行为,并且我仍然想知道为什么如果您将 SetEnv 值作为标题发送,Coldfusion 基本上会忽略它们,以及是否存在最佳实践。

答案1

您是否只是通过 CGI 范围的 CFDUMP 检查,然后它不会输出自定义环境变量。它仅转储预定义的 cgi 变量列表。

相关内容