為什麼SetEnv設定的值可以透過修改瀏覽器中的標頭來更改

為什麼SetEnv設定的值可以透過修改瀏覽器中的標頭來更改

我正在使用 Apache 伺服器設置,我們希望在虛擬主機中使用 SetEnv 來定義程式碼是否在開發、測試版或生產中運行。實際的 Web 應用程式運行在Coldfusion 8/JRun。我使用以下程式碼在虛擬主機中設定了值:

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

該應用程式可以很好地讀取該值。但是,如果我使用 Firefox 中的修改標頭外掛程式發送名為 COLDFUSION_ENVIRONMENT 的標頭以及另一個值(例如 foobar),則應用程式中將使用來自瀏覽器的值,而不是虛擬主機中定義的值。當然,問題是為什麼以及如何防止這種情況發生?使用環境變數似乎很常見,以便確定應用程式在哪個伺服器上運行,因此,如果這確實是這樣做的方法,那麼對我來說,這看起來是一個相當大的安全漏洞,因為它將打開以下選項:在生產伺服器上切換到開發模式...在 Coldfusion 中是否有其他最佳實踐方法可以做到這一點?

更新:

我能夠透過使用以下命令而不是 SetEnv 來解決最初的問題:

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

然而,它仍然感覺像是一個駭客,我仍然想知道為什麼 Coldfusion 基本上忽略 SetEnv 值(如果您將它們作為標頭發送)以及是否有最佳實踐。

答案1

您是否只是簡單地通過 CGI 範圍的 CFDUMP 檢查,那麼它不會輸出自訂環境變數。它只轉儲預先定義的 cgi 變數列表。

相關內容