我做了很多搜索,還閱讀了PHP $ _SERVER文檔。對于在我的網站中使用的簡單鏈接定義,我的PHP腳本使用哪個權限?$_SERVER['SERVER_NAME'] 是基于您的Web服務器的配置文件(在我的情況下是Apache2),并根據一些指令而變化:(1)VirtualHost,(2)ServerName,(3)UseCanonicalName等。$_SERVER['HTTP_HOST'] 基于客戶的要求。因此,在我看來,為了使我的腳本盡可能兼容而使用的正確方法是$_SERVER['HTTP_HOST']。這個假設是否正確?后續評論:我想在讀完這篇文章之后我有點偏執,并注意到有些人說“他們不會相信任何一個$_SERVER變種”:http://markjaquith.wordpress.com/2009/09/21/php-server-vars-not-safe-in-forms-or-links/http://php.net/manual/en/reserved.variables.server.php#89567(評論:Vladimir Kornea 14-Mar-2009 01:06)顯然,討論主要是關于$_SERVER['PHP_SELF']為什么你不應該在表單action屬性中使用它而沒有適當的轉義以防止XSS攻擊。我對上述原始問題的結論是$_SERVER['HTTP_HOST'],即使在表單中使用,也可以“安全”地使用網站上的所有鏈接,而不必擔心XSS攻擊。如果我錯了,請糾正我。
3 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
只是另外一個注意事項 - 如果服務器在80以外的端口上運行(在開發/內聯網機器上可能是常見的),則HTTP_HOST包含端口,而不包含端口SERVER_NAME。
$_SERVER['HTTP_HOST'] == 'localhost:8080'
$_SERVER['SERVER_NAME'] == 'localhost'
(至少這是我在基于Apache端口的虛擬主機中注意到的)
正如邁克下面提到的,HTTP_HOST并沒有包含:443在HTTPS運行時(除非你是一個非標準端口,我沒有測試運行)。
添加回答
舉報
0/150
提交
取消