我做了很多搜索,还阅读了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
提交
取消