我正在创建一个网络应用,其中有许多域指向同一个应用,但显示的内容将取决于用于访问该应用的域。
我目前正在使用
$_SERVER['HTTP_HOST']
获取域名并提取正确的内容。
我读到这不安全,因为
客户端可以将HTTP_HOST设置为它想要的任意值
这怎么可能?我怎样才能防止这种情况发生?
答案 0 :(得分:1)
在IF等比较语句中使用HTTP_HOST是完全没问题的。如果将HTTP_HOST数据直接用于需要清理数据(如SQL查询字符串)的方法,则只会开始遇到问题,因为用户可能会错误地执行标头以执行SQL注入
如果用户对主机标头出错,并且您有IF比较,例如if($ _ SERVER [' HTTP_HOST'] ==' www.google.com')然后更改它不会对恶意用户做任何有用的事情。如果您通过该标题控制上下文,那么它就不会打印任何内容
答案 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
。将服务器配置依赖于白名单值是没有意义的。