使用$ _SERVER安全地获取URL

时间:2015-04-25 19:10:25

标签: php security url

我正在创建一个网络应用,其中有许多域指向同一个应用,但显示的内容将取决于用于访问该应用的域。

我目前正在使用

$_SERVER['HTTP_HOST']

获取域名并提取正确的内容。

我读到这不安全,因为

  

客户端可以将HTTP_HOST设置为它想要的任意值

来自Get the full URL in PHP

这怎么可能?我怎样才能防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

在IF等比较语句中使用HTTP_HOST是完全没问题的。如果将HTTP_HOST数据直接用于需要清理数据(如SQL查询字符串)的方法,则只会开始遇到问题,因为用户可能会错误地执行标头以执行SQL注入

如果用户对主机标头出错,并且您有IF比较,例如if($ _ SERVER [' HTTP_HOST'] ==' www.google.com')然后更改它不会对恶意用户做任何有用的事情。如果您通过该标题控制上下文,那么它就不会打印任何内容

See this answer for more details

答案 1 :(得分:1)

HTTP_HOST来自原始HTTP请求。这样的请求可能如下:

GET /index.php HTTP/1.1
Host: example.com

当单个IP地址为多个站点提供服务时,主机字段特别有用,这是一种说明“hello server的方式,在您可能托管的所有网站中,我想查看这个特定的网站。” 根据服务器的配置方式(例如,Apache的虚拟主机),它可以接受任意值并提供默认网站,或使用白名单并拒绝非白名单值。

无论哪种方式,在您的PHP代码中,您应该验证HTTP_HOST值是否是您期望的值。如果不是,则应提供HTTP错误页面,例如403 permission denied。将服务器配置依赖于白名单值是没有意义的。