【Nginx】valid_referers 参数绕坑指南

Nginx 提供了valid_referers参数用于检查url中refer参数的状态,首先看下官方配置:

Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
1
2
3
能看到valid_referers总共有4种值可以使用,none、blocked、server_names、string。

我们暂且概括一下有3种值可以用:

1.none //直接访问url,而不使用任何网站或链接的跳转,$http_referer变量的值是空的。
2.blocked //请求标头中存在“ Referer”字段,但其值已被防火墙或代理服务器删除;这些值是不以“ http://”或“ https://”开头的字符串;
3.字符串 //配置域名列表,支配通配符、正则表达式写法。
看到很多人这么配:

valid_referers none blocked *.example.com;
if ($invalid_referer) {
#rewrite ^/ http://www.example.com/;
return 403;
}
1
2
3
4
5
这么写表示:如果"refer为空"、或"refer不以http/https开头"、或"域名为example.com的server_name" 都是有效的refer,也即valid_referers的值为0(允许访问),除此之外为1(返回403)。

这种写法可能和很多小伙伴的本意并不一样,这么写的结果就是把非法的refer也加白了,很多人的想法可能是:

“只允许refer白名单的域名访问”,其它返回403。
如果是这种需求,配置应该这么写:

valid_referers *.example.com;
if ($invalid_referer) {
#rewrite ^/ http://www.example.com/;
return 403;
}
1
2
3
4
5
去掉是none和blocked参数,也即:除了refer白名单的域名允许访问,其它都返回403(也包含none和blocked的refer也返回403)。

这么表达可能更准确些,大家弄清楚搜索出来的配置,不是所有的配置都能直接用,需要弄明白配置的真正意义,贴配置的同学也要有责任心,乱贴配置容易产生误导。

官方文档:http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers
————————————————
版权声明:本文为CSDN博主「chromiumer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chromiumer/article/details/111849283

posted @   GaoYanbing  阅读(2342)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示