

当 Web 应用程序直接使用客户端请求中的 Host 头字段(如用于生成跳转链接、重定向操作、密码重置功能等)时,攻击者可通过伪造 Host 头注入恶意内容,导致密码重置劫持、缓存污染、服务器端请求伪造(SSRF) 等严重安全风险。
本文详细介绍如何通过 Nginx 配置严格校验 Host 头合法性,有效防御此类安全威胁。
HTTP 请求中的 Host 头完全由客户端控制,属于不可信数据源
如果后端代码直接使用 $host 或 $_SERVER['HTTP_HOST'] 等变量生成 URL(例如:https://$host/reset?token=xxx),攻击者可构造恶意请求:
text
GET / HTTP/1.1
Host: evil.com
这将导致生成形如 https://evil.com/reset?token=xxx 的恶意链接,造成用户凭证泄露或钓鱼攻击。
在 Nginx 层面拦截非法 Host 请求,仅允许预先定义的合法域名通过验证。
nginx
server {
listen 80;
server_name www.xlsys.cn;
# Host 头安全防护
set $flag 0;
if ($host == "www.xlsys.cn") {
set $flag 1;
}
if ($flag = 0) {
return 403;
}
location / {
root /www/h5;
index index.php index.html index.htm;
}}
方案优势:
1.使用标志位变量避免 Nginx if 指令嵌套的潜在陷阱
2.逻辑清晰易懂,维护简便
3.具备较高的执行可靠性
适用于主站、子站点及本地测试环境共存的复杂场景:
nginx
server {
listen 80;
server_name www.xlsys.cn;
set $flag 0;
if ($host == "www.xlsys.cn") { set $flag 1; }
if ($host == "www.example.cn") { set $flag 1; }
if ($host == "localhost") { set $flag 1; }
if ($flag = 0) {
return 403;
}
location / {
root /www/h5;
index index.php index.html index.htm;
}}
或者使用正则表达式实现:
nginx
set $flag 0;if ($host ~* "^(www\.xlsys\.cn|www\.example\.cn|localhost)$") {
set $flag 1;}if ($flag = 0) {
return 403;}
nginx
server {
listen 80;
server_name www.xlsys.cn;
# 允许访问的合法域名和IP段
if ($http_Host !~* "^(www\.xlsys\.cn|134\.175\.\d{1,3}\.52|192\.168\.10\.\d{1,3}|175\.6\.\d{1,3}\.12|127\.0\.0\.1)$") {
return 403;
}
location / {
root /www/h5;
index index.php index.html index.htm;
}}
注意事项:
1.使用 $http_Host 明确指定请求头字段
2.正则表达式中的点号需转义为 \.,避免匹配任意字符
3.IP 地址段使用 \d{1,3} 进行范围限制
4.生产环境优先推荐精确匹配,慎用复杂正则表达式
bash
curl -H "Host: www.xlsys.cn" http://your-server-ip/
预期结果:正常返回请求内容
bash
curl -H "Host: evil.com" http://your-server-ip/
预期结果:返回 403 Forbidden 错误
1.永不信任 Host 头:后端应用程序应使用配置文件中预定义的固定域名生成 URL
2.多层防御策略:即使后端具备校验机制,Nginx 层拦截仍可有效减少无效请求
3.默认服务块配置:确保默认 server 块返回 444 或 403 状态码,避免泄露敏感信息
4.安全日志记录(可选增强):
nginx
if ($flag = 0) {
access_log /var/log/nginx/host_attack.log;
return 403;}
通过在 Nginx 层面对 $host 实施严格校验,可以低成本、高效率地防御 HTTP Host 头攻击。对于大多数应用场景,推荐采用方案一(标志位验证)或多域名精确匹配方案,避免复杂正则表达式可能带来的维护风险和性能开销。

一家致力于优质服务的软件公司
8年互联网行业经验1000+合作客户2000+上线项目60+服务地区

关注微信公众号
