我正在使用通配符子域为每个用户提供一个页面username.domain.com。
用户名本身在注册时已正确清理。
为简化本问题的目的,假设我有一个针对所有请求运行的PHP脚本。它使用...
获取域组件$domain_components = explode( '.', $_SERVER['SERVER_NAME'] );
...然后弹出tld,主域和子域。
问题是,我是否需要将$_SERVER['SERVER_NAME']
变量的内容,特别是域组件的内容视为具有潜在敌意?直观地说,我想不会因为PHP和Apache必须在我到达我的代码之前做得很好(并且this answer似乎确认它,因为变量在服务器控制之下),但我会我确信我不会忽视任何事情。
您是否通过$_SERVER['SERVER_NAME']
知道任何已知的攻击?
(我使用的是PHP 5.3.9和Apache 2.2.3。)
答案 0 :(得分:0)
我的理解是$_SERVER
变量是由服务器构建的 - 因此外部浏览器不会影响其内容,除非您的服务器受到损害。如果是这种情况,$ _SERVER的内容是您最不担心的。
修改强>
除了那些采用$_SERVER['HTTP...]
形式的
答案 1 :(得分:0)
http://shiflett.org/blog/2006/mar/server-name-versus-http-host
似乎存在一些风险,但该帖子中有一些暗示,尽管它已经过时了。在查询中使用该变量(清理/转义!)来查找正确的用户并且如果可行的话接受它可能没有错。在此之后,您不再需要它,所以只使用您的内部数据。
答案 2 :(得分:-1)
您可以信任SERVER_NAME
设置:
<VirtualHost *>
ServerName server.domain.com
ServerAlias server server2.domain.com server2
# ...
</VirtualHost>