项目中遇到http host头攻击的解决办法,支持nginx,apache 两种办法。
以下是漏洞的一些内容:
安全漏洞描述
为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER[“HTTP_HOST”]。 但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。
风险等级:高
解决办法
web应用程序应该使用SERVER_NAME而不是host header。 在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。
在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
本质上就是在服务侧鉴定请求来源, 非法来源直接过滤掉。
nginx 解决方案
打开nginx的网站配置文件,一般为 /etc/nginx/conf.d/xxx.conf
添加如下配置
server {
listen 80;
server_name 127.0.0.1;
# 防止http host 攻击的配置: 仅允许 指定域名访问,其他域名返回403
if ($http_Host !~* ^domain.com|127.0.0.1:80$) {
return 403;
}
# 其他配置
}
重启nginx即可
nginx -s reload
Apache解决方案
打开Apache的配置 , 一般为 /conf/httpd.conf
添加如下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ /403.html
重启apache即可
安全无小事!!!
文档信息
- 本文作者:寒澈
- 本文链接:https://www.hancher.top/2023/06/20/http_url_header_attack/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)