IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx配置valid_referer解决跨站请求伪造(CSRF) -> 正文阅读

[系统运维]Nginx配置valid_referer解决跨站请求伪造(CSRF)

Nginx配置valid_referer解决跨站请求伪造(CSRF)

漏洞说明

漏洞描述

跨站请求伪造(CSRF)。即使是格式正确有效且一致的请求也有可能在用户不知情的情况下发送。例如,如果某个 Web 服务器设计为接收客户机的请求时,没有任何机制来验证该请求是否确实是客户机发送的,那么攻击者就有可能诱导客户机向该 Web 服务器误发请求,而该请求将视为真实请求。这可通过 URL 、图像装入、XMLHttpRequest 等来完成,并可导致数据暴露或意外的代码执行。如果用户当前已登录到受害者站点,请求将自动使用用户的凭证(包括会话 cookie、IP 地址和其他浏览器认证方法)。通过使用此方法,攻击者可伪造受害者的身份,并以其身份提交操作。因此,Web应用程序应该检查所有客户端发起的请求,以发现其不合法的迹象。

跨站请求伪造 Wiki:https://en.wikipedia.org/wiki/Cross-site_request_forgery

危害等级

CSRF 漏洞脆弱性的严重程度取决于受影响应用程序的功能。例如,对搜索页面的 CSRF 攻击的严重性低于对转账交易页面的 CSRF 攻击。

修复建议

image-20220221140830350

漏洞复现

可以使用 curl 或 BurpSuite 工具携带非法 http_referer 复现测试

curl测试方法

curl -h

 -I, --head          Show document info only
 -e, --referer <URL> Referrer URL
curl -e "http://www.baidu.com" -I http://192.168.64.149

测试结果:任意修改 referer 信息,服务器都能返回 302 Found
image-20220221143248101

BurpSuite测试方法

BurpSuite 下载链接:
https://portswigger.net/burp/releases/professional-community-2022-1-1?requestededition=community

开启代理抓包后,Send to Repeater
image-20220221144239322
点击 Send 重复发送当前包,下面是未修改的正确 Referer,及其返回状态码:200 OK
image-20220221144806905
任意修改 Referer 信息,再发送数据包,观察返回状态码。可以看到都能返回:200 OK,即正常请求到 web 页面
image-20220221145500343

漏洞修复

为验证漏洞修复的情况和修复方案的可行性,这里使用 AppScan 对测试网站进行扫描,对比修复前后的结果。

修复前扫描测试

image-20220221150222733
image-20220221134515231

漏洞修复方案

这里采用 AppScan 修复建议中的第7点,修改 nginx.conf,添加 http_referer 头配置

#       server_name             localhost;

#### http_referer fix
        valid_referers none blocked server_names 127.0.0.1 192.168.64.149 *.baidu.com;
        if ($invalid_referer) {
            return 403;
        }
        
##  语义解析:
##  首先指定valid_referers,即合法的referer值;
##  none:“Referer”字段在请求头中丢失;即允许没有http_refer的请求访问资源;
##  blocked:“Referer”字段在请求头中存在,但其值已被防火墙或代理服务器删除;不以“http://”或“https://”开头的字符串;
##  如果“Referer”请求报头字段值能匹配valid_referers,$invalid_referer为空字符串,否则为“1”;
##  如果匹配到,$invalid_referer为空字符串,if判断语句后的内容不执行;
##  如果匹配不到,$invalid_referer值为1,执行if判断语句后的内容,即返回403跳转页面
##  建议查阅nginx官方文档:http://nginx.org/en/docs/http/ngx_http_referer_module.html

image-20220221220433227
?????? 需要注意的是,如果已经配置server_name参数,且需要保留,valid_referers 参数需要做调整,否则重启 nginx 时会提示参数冲突(nginx: [emerg] conflicting parameter)。

如下面例子中,允许 referer 的字段值为:127.0.0.1、192.168.64.149、*.baidu.com。最终效果可以理解为 server_name 和 valid_referers 两者互补。

#       server_name             localhost;

#### http_Host fix
        server_name             127.0.0.1 192.168.64.149;
        if ($http_Host !~* ^127.0.0.1$|^192.168.64.149$) {
                return          403;
        }

#### http_referer fix
        valid_referers none blocked server_names *.baidu.com;
        if ($invalid_referer) {
                return          403;
        }

image-20220222103222376
重启 Nginx

nginx -s reload

image-20220221151301024

漏洞修复验证

仅当携带 server_name 为 referer 时,服务器返回了 302 Found;
携带其他任意非 server_name 为 referer 的情况下,服务器都返回 403 Forbidden。

  • curl 测试结果

image-20220221151658303

  • BurpSuite 测试结果

image-20220221152600232
image-20220221152711270

修复后扫描测试

image-20220221152845015
以上,如有错误之处,敬请指正。

参考文章

https://en.wikipedia.org/wiki/Cross-site_request_forgery
http://nginx.org/en/docs/http/ngx_http_referer_module.html
https://www.jianshu.com/p/0de3e5faea0d
http://www.codeforest.cn/article/93
https://www.cnblogs.com/wajika/p/6575656.html

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 21:02:27  更:2022-02-22 21:03:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:29:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码