web安全:跨站请求伪造 (CSRF)

ops/2025/2/22 5:57:48/

跨站请求伪造 (CSRF)

跨站请求伪造(CSRF,Cross-Site Request Forgery) 是一种网络攻击方式,攻击者诱使受害者在未经其授权的情况下执行特定操作。CSRF 利用受害者已登录的身份和浏览器自动发送的认证信息(如 Cookie)来冒充受害者,发起未经授权的请求。此攻击通常会导致严重的安全问题,特别是在银行、电子商务和社交网络等网站上。


CSRF 攻击的工作原理

银行转账操作案例

  1. 用户登录银行网站
    用户访问银行网站并登录,提交登录凭据后,银行生成会话 Cookie 并存储在浏览器中:

    Cookie: JSESSIONID=randomid
    

    用户在登录后未注销,浏览器保存此 Cookie 用于后续的认证。

  2. 银行提供的合法转账表单
    银行网站的转账表单如下:

    <form method="post" action="https://bank.example.com/transfer"><input type="text" name="amount" placeholder="Amount" /><input type="text" name="routingNumber" placeholder="Routing Number" /><input type="text" name="account" placeholder="Account Number" /><input type="submit" value="Transfer" />
    </form>
    

    用户提交数据后,浏览器发送如下请求:

    POST /transfer HTTP/1.1
    Host: bank.example.com
    Cookie: JSESSIONID=randomid
    Content-Type: application/x-www-form-urlencodedamount=200&routingNumber=1234&account=5678
    
  3. 攻击者设置陷阱
    攻击者创建了一个恶意网站,并设计了一段 HTML 代码模拟银行的转账操作:

    <form method="post" action="https://bank.example.com/transfer"><input type="hidden" name="amount" value="500" /><input type="hidden" name="routingNumber" value="attackerRouting" /><input type="hidden" name="account" value="attackerAccount" /><input type="submit" value="Click to Claim Prize" />
    </form>
    

    攻击者诱使用户访问该页面,用户无意间点击了提交按钮,触发请求。

  4. 后果
    浏览器发送以下请求到银行服务器:

    POST /transfer HTTP/1.1
    Host: bank.example.com
    Cookie: JSESSIONID=randomid
    Content-Type: application/x-www-form-urlencodedamount=500&routingNumber=attackerRouting&account=attackerAccount
    

    银行服务器因为依赖 Cookie 自动认证,误以为是用户本人发起的合法操作,将资金转入攻击者账户


CSRF 的核心特点

  1. 自动发送凭据
    浏览器会自动携带与目标网站相关的 Cookie 和其他认证信息。
  2. 用户无感知
    用户通常不会察觉攻击的发生,因为它可能嵌入在正常网页或隐藏的代码中。
  3. 利用受信任身份
    服务器将受害者的身份视为合法,因此执行攻击者设计的操作。

CSRF 攻击的危害

  1. 资金损失:攻击者可通过伪造请求进行转账或支付操作。
  2. 数据篡改:攻击者可修改用户数据,如更改密码、邮箱等。
  3. 账户劫持:攻击者可利用 CSRF 攻击获取用户权限,进一步控制账户。
  4. 服务滥用:攻击者可利用受害者的身份执行恶意操作,如发送垃圾邮件或发起 DDoS 攻击。

防范 CSRF 攻击的方法

1. 使用 CSRF Token

  • 在表单或请求中添加一个随机生成的 Token,服务器验证该 Token 是否匹配。

  • 示例:

    <form method="post" action="/transfer"><input type="hidden" name="csrf_token" value="randomly_generated_token" /><input type="text" name="amount" /><input type="submit" value="Transfer" />
    </form>
    

2. 验证请求来源

  • 检查 RefererOrigin 头部,确保请求来自合法的源。

  • 示例:

    Referer: https://bank.example.com
    Origin: https://bank.example.com
    

3. 使用 SameSite Cookie

  • 设置 Cookie 的 SameSite 属性为 StrictLax,防止跨站请求携带 Cookie。

  • 示例:

    Set-Cookie: JSESSIONID=randomid; SameSite=Strict
    

4. 限制安全方法

  • 确保安全方法(如 GETHEADOPTIONS)是只读的,不用于修改数据。
  • 示例:
    • 使用 POSTPUT 方法执行写操作。
    • 避免使用 GET 方法执行敏感操作。

5. 双重认证

  • 对敏感操作(如转账、修改密码)要求用户进行双重认证,例如输入短信验证码。

6. 定期安全测试

  • 使用自动化工具(如 OWASP ZAP)进行安全测试,检查是否存在 CSRF 漏洞。

其他防护建议

  1. 避免直接使用 GET 方法进行状态改变:避免使用 GET 请求来执行会影响服务器状态的操作,例如提交表单、修改数据等。始终使用 POST 方法来进行更改操作。
  2. 对应用进行安全审计和渗透测试:定期进行 CSRF 漏洞检测,包括使用自动化工具(如 OWASP ZAP)进行测试,确保应用程序没有 CSRF 漏洞。
  3. 教育用户:虽然大部分防护措施都在技术层面,但用户教育也很重要。提醒用户不要随便点击未知网站的链接或填写不明网站的表单。

扩展阅读

  • OWASP CSRF Prevention Cheat Sheet
  • 《Web应用程序安全权威指南》

http://www.ppmy.cn/ops/160437.html

相关文章

TTL和CMOS的区别【数电速通】

CMOS电平&#xff1a;电压范围在3&#xff5e;15V&#xff1b;常见电压在12V。 TTL电平&#xff1a;电压范围在0&#xff5e;5V&#xff0c;常见都是5V CMOS的特点&#xff1a;电平由电源VDD​ 决定&#xff0c;而不是外部电源电平。 COMS电路的使用注意事项 我们在使用CMOS…

AI赋能传统系统:Spring AI Alibaba如何用大模型重构机票预订系统?

零、效果 一、启动项目 1.0、前置条件 Java 17Node.js 18获取 API key 具体文档&#xff1a;获取APP ID和Workspace ID_大模型服务平台百炼(Model Studio)-阿里云帮助中心 1.1、下载代码 Github地址&#xff1a;https://github.com/springaialibaba/spring-ai-alibaba-exa…

深度探索:DeepSeek与鸿蒙HarmonyOS应用开发的深度融合

文章目录 一、概述1.1 什么是DeepSeek&#xff1f;1.2 鸿蒙HarmonyOS的特点 二、技术优势与应用场景2.1 技术优势2.2 应用场景 三、开发指南3.1 环境搭建3.2 集成AI模型3.3 分布式任务调度 四、实际案例分析4.1 智能家居控制4.2 智能健康监测 五、未来展望《AI智能化办公&#…

Memcached(主主复制与keepalive高可用)

案例环境 cache1&#xff1a;192.168.180.144 cache2&#xff1a;192.168.180.145 cache-api&#xff1a;192.168.180.143 案例过程 前置准备 关闭所有设备防火墙 systemctl stop firewalld && setenforce 0 更改主机名 hostnamectl set-hostname cache1 &…

linux 搭建nfs服务(共享文件夹)

linux 搭建nfs服务&#xff08;共享文件夹&#xff09; 要在Linux服务器上创建一个共享目录&#xff0c;并让macOS可以访问和复制拷贝文件&#xff0c;你可以按照以下步骤操作&#xff1a; 这个以ip为192.168.3.200的ubuntu 2022.04的服务器为示例 nfs 服务安装 在Linux服务…

Scrapy分布式爬虫系统

一、概述 在这篇博文中,我们将介绍如何使用Docker来部署Scrapy分布式爬虫系统,包括Scrapyd、Logparser和Scrapyweb三个核心组件。这种部署方式适用于Scrapy项目和Scrapy-Redis分布式爬虫项目。 需要安装的组件: Scrapyd - 服务端,用于运行打包后的爬虫代码,所有爬虫机器都需要…

山石网科×阿里云通义灵码,开启研发“AI智造”新时代

近日&#xff0c;山石网科正式宣布全面接入阿里云通义灵码企业专属版&#xff0c;这标志着山石网科在研发智能化、自动化领域迈出重要一步&#xff0c;为研发工作注入强大的AI动力&#xff0c;实现多维度的效率飞跃。 此次合作&#xff0c;阿里云通义灵码依托强大的AI能力&…

LLM论文笔记 9: Neural Networks and the Chomsky Hierarchy

Arxiv日期&#xff1a;2022.9.29机构&#xff1a;Google DeepMind / Stanford 关键词 transformer架构原理乔姆斯基体系长度泛化 核心结论 1. 虽然Transformer理论上具有图灵完备性&#xff0c;但在实践中能力受到位置不变性和有限记忆的限制 2. Transformer在一些任务中表现…