PHP $ _SERVER ['HTTP_HOST']与$ _SERVER

我做了很多搜索,还阅读了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攻击。


如果我错了,请纠正我。


哔哔one
浏览 1367回答 3
3回答

猛跑小猪

只是另外一个注意事项 - 如果服务器在80以外的端口上运行(在开发/内联网机器上可能是常见的),则HTTP_HOST包含端口,而不包含端口SERVER_NAME。$_SERVER['HTTP_HOST'] == 'localhost:8080'$_SERVER['SERVER_NAME'] == 'localhost'(至少这是我在基于Apache端口的虚拟主机中注意到的)正如迈克下面提到的,HTTP_HOST并没有包含:443在HTTPS运行时(除非你是一个非标准端口,我没有测试运行)。
打开App,查看更多内容
随时随地看视频慕课网APP