当前位置: 首页 > article >正文

Web漏洞之CSRF和SSRF

Web漏洞之CSRF和SSRF

CSRF

CSRF(Cross Site Request Forgery,跨站请求伪造)是一种通过利用用户身份认证信息,诱导用户执行非预期请求的攻击方式。

一、基础知识

1. 漏洞原理

CSRF 的核心在于黑客利用用户的身份认证信息,让用户在不知情的情况下向受信任的网站发送请求。例如,黑客可能诱导用户执行银行转账操作,而银行由于接收到用户的身份认证信息,误以为这是合法请求,从而导致损失。

2. 与 XSS 的区别
  • CSRF:通过借用用户的权限完成攻击,攻击者并未直接获取用户的权限。
  • XSS:攻击者直接窃取用户的权限,实施破坏。
3. 攻击过程
  1. 用户访问受信任网站 A,并登录。
  2. 网站 A 返回 Cookie 信息,用户可以正常操作。
  3. 用户未退出网站 A 的情况下,打开另一个恶意网站 B。
  4. 网站 B 返回恶意代码,并触发对网站 A 的请求。
  5. 浏览器携带用户的 Cookie 信息,向网站 A 发送请求。网站 A 误以为请求来自合法用户,从而执行操作。
4. 实例

黑客 Mallory 创建一个带有如下代码的恶意网站:

<img src="http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory" />

当受害者 Bob 登录银行后访问该恶意网站时,浏览器会自动发送该请求,附带 Bob 的 Cookie 信息。银行服务器在未识别请求来源的情况下,执行了转账操作,导致 Bob 的损失。

二、防御措施

1. 验证用户操作

在执行敏感操作(如转账)时,要求用户重新输入密码。

2. 验证 HTTP Referer 字段

通过检查 HTTP Referer 确保请求来源于受信任的页面。例如,银行网站的请求来源应为自身域名。缺点是部分浏览器可能被篡改 Referer 或用户自行关闭 Referer。

3. 请求地址中添加 Token

在请求中加入难以伪造的 Token,服务端验证 Token 的正确性。例如:

  • 对于 GET 请求:http://example.com/action?token=uniqueToken
  • 对于 POST 请求:
<input type="hidden" name="csrftoken" value="uniqueToken" />

Token 的安全性需特别注意,避免被外部恶意用户获取。

4. 设置验证码

在关键操作中要求用户完成验证码验证,防止自动化攻击。


SSRF

SSRF(Server Side Request Forgery,服务器端请求伪造)是一种通过伪造服务器请求,利用服务器访问攻击者无法直接访问资源的漏洞。

一、基础知识

1. 漏洞原理

SSRF 攻击通常利用网站提供的从远程服务器获取数据的功能,构造恶意请求,诱使服务器访问内部系统。例如:某网站允许用户输入图片链接以加载远程图片,攻击者可输入恶意链接,触发服务器访问内网。

2. 示例

某网站允许通过 URL 参数加载文章内容:

http://www.example.com/article.php?url=https://blog.example.com/article

攻击者可构造以下恶意 URL:

  • 访问本地文件:http://www.example.com/article.php?url=file:///etc/passwd
  • 访问本地服务:http://www.example.com/article.php?url=http://127.0.0.1:22
  • 使用其他协议:
    • dict://127.0.0.1:22/data:data2
    • gopher://127.0.0.1:2233/_test

通过这些 URL,攻击者可以利用服务器获取内部系统信息。

二、挖掘方法

1. 从功能上寻找
  • 分享功能:通过 URL 分享内容。
  • 转码服务:对 URL 内容进行优化处理。
  • 在线翻译:通过 URL 翻译文本。
  • 图片加载或下载:通过 URL 加载或下载图片。
  • 未公开 API:通过 URL 访问 API 功能。
2. 从 URL 关键字上寻找

关键字包括:shareurllinksrcsourcetargetimageURL 等。

三、防御措施

1. 限制请求协议

仅允许 HTTP 和 HTTPS 协议,禁止如 file://dict://gopher:// 等协议。

2. 限制访问 IP 地址

仅允许访问白名单内的外部 IP 地址,禁止访问本地或内网地址(如 127.0.0.1192.168.0.0/16)。

3. 限制访问端口

禁止访问敏感端口(如 223306 等),避免访问非必要服务。

4. 统一错误处理

设置统一的错误页面,防止信息泄露。例如,不返回具体的错误信息,而是返回通用提示。


通过了解 CSRF 和 SSRF 的原理及防御方法,可以有效地保护 Web 应用程序免受此类攻击,提高系统的安全性。


http://www.kler.cn/a/454834.html

相关文章:

  • Etcd注册中心基本实现
  • 《QT 5.14.1 搭建 opencv 环境全攻略》
  • 软考和 PMP 哪个含金量更高点?
  • 【安全编码】Web平台如何设计防止重放攻击
  • 使用驱动器光盘需格式化:深度解析与数据恢复全攻略
  • WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
  • 支持向量机入门指南:从原理到实践
  • 前端图像处理(二)
  • docker 容器中没有ping命令和ifconfig命令和wget怎么办?
  • LeetCode-Z 字形变换(006)
  • layui动态拼接生成下拉框验证必填项失效问题
  • 曼哈顿图如何指定不同染色体不同的颜色
  • 【Linux命令】ps -a 和 ps -ef 的区别
  • MySQL 服务正在启动.MySQL 服务无法启动.服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。总结较全 (已解决)
  • 香港站群服务器如何排查 Linux 系统的内存泄漏问题
  • 远程作业专家指导调度系统
  • 中巨伟业推出高安全高性能32位智能卡内核可编程加密芯片SMEC88SP/ST
  • 通过百度api处理交通数据
  • Java中处理if-else的几种高级方法
  • 用Excel表格在线发布期末考试成绩单
  • USB免驱IC读写器QT小程序开发
  • 计算机网络 (9)数据链路层
  • 深度学习在图像识别中的最新进展与实践案例
  • 如何在 Vue 中处理 API 请求?
  • 第3章 并行循环调度的准则
  • c++ 打开摄像头并显示摄像头捕获的数据