客户端伪造(CSRF)漏洞修复,nginx配置修复篇。
·

什么是CSRF?
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
CSRF攻击利用用户已登录的身份,通过伪造请求执行非法操作,危害极大。通过验证HTTP Referer字段、添加Token验证、使用JSON API、验证码等方法,可以有效防御CSRF攻击,保护用户数据与财产安全。
本文由于公司项目复杂,将在nginx中对CSRF攻击进行漏洞修复。
修复原理
通过验证HTTP 请求头中 Referer 字段校验客户端来源。
直接上配置
在nginx Http层,(注意不要在Server层 )中添加以下配置,由于内网中有互相引用的服务,增加了白名单配置。
map $request_uri $referer_white_list_allow {
default 0;
#放行的路径,后期可扩展更多白名单路径
"~*/api/sys/sys-dlp-probe/heart" 1;
}
map $http_referer $is_allowed_referer {
default 0;
#校验Referer是否是指定客户端的ip
"~*^https?://172\.16\.0\.104" 1;
}
map "$referer_white_list_allow:$is_allowed_referer" $allow_request {
# 如果路径在白名单中,直接允许
~^1: 1;
# 如果路径不在白名单中,但 Referer 校验通过,允许
~^0:1 1;
# 其他情况拒绝
default 0;
}
最后,在需要校验路径的location中加入下面的判断
// 如果此变量等于0,说明上面有伪造请求嫌疑,返回错误码
if ($allow_request = 0) {
return 403 "Forbidden: Invalid Referer or Path";
}
这里用到了nginx中的map方法,将请求头根据下面的条件对变量进行赋值,感兴趣的小伙伴自己研究一下!

更多推荐

所有评论(0)