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

跨站请求伪造

1. 什么是 CSRF?

CSRF,全称为 Cross-Site Request Forgery,中文是 跨站请求伪造。它通常被缩写为 CSRF 或 XSRF,读作 “Sea-Surf”。

核心概念:
攻击者欺骗用户的浏览器,让其以一个已登录用户的身份,在用户不知情的情况下,向一个目标网站发送一个恶意请求。

简单比喻:
你登录了网上银行(相当于拿到了银行的“临时通行证”)。这时,一个坏人给你发了一个链接,你点击后,这个链接其实是一个“自动提交的转账表单”,它利用你浏览器里已有的“临时通行证”,成功执行了转账操作。你的浏览器“代表”你发出了这个请求,银行认为这是你的合法操作。


2. CSRF 的攻击原理与流程

要成功发起 CSRF 攻击,必须同时满足以下三个条件:

  1. 用户已经登录了目标网站(如银行、邮箱、社交网络),并在浏览器中保持了登录状态(Session 未过期)。
  2. 用户访问了恶意攻击者精心构造的页面(如钓鱼邮件中的链接、恶意网站)。
  3. 目标网站没有对敏感请求进行有效的 CSRF 防护。

攻击流程示意图:
在这里插入图片描述

举个例子:

  1. 小明登录了 bank.com,浏览器保存了他的登录 Cookie。
  2. 小明收到一封邮件,里面有一个链接,他好奇地点开了,进入了攻击者控制的网站 evil.com
  3. evil.com 的页面上有一个隐藏的 HTML 表单,它会自动向 bank.com 的转账接口提交请求。
    <form action="https://bank.com/transfer" method="POST" id="csrf-form"><input type="hidden" name="toAccount" value="hacker"><input type="hidden" name="amount" value="100000">
    </form>
    <script>document.getElementById('csrf-form').submit();</script>
    
  4. 小明的浏览器在向 bank.com 发送这个 POST 请求时,会自动携带 bank.com 的登录 Cookie。
  5. bank.com 服务器收到请求,验证 Cookie 有效,认为是小明本人操作的,于是成功将 100,000 元转给了 hacker。

3. CSRF 的特点

  • 利用的是网站的信任:网站信任用户浏览器发出的、带有正确 Session Cookie 的请求。
  • 受害者是用户:攻击的最终受害者是用户,但漏洞的根源在于目标网站。
  • 攻击者无法直接获取 Cookie:与 XSS 不同,CSRF 攻击中,攻击者并不知道用户的 Cookie 内容,他只是利用了浏览器自动发送 Cookie 的机制。
  • 请求是“合法”的:从服务器的日志看,这个请求和用户正常操作的请求几乎没有区别。

4. 如何防御 CSRF

防御的核心思想是:“增加一个攻击者无法伪造的、不属于浏览器自动发送机制的凭证。”

1. 同源策略检查
  • 原理:浏览器会阻止一个源的脚本访问另一个源的资源。但这并不能阻止 img、form 等标签发起的跨域请求。
  • 方法:服务器验证 OriginReferer 请求头,检查请求是否来自合法的源(域名)。但某些情况下 Referer 可能被禁用或不发送。
2. CSRF Tokens(最常用、最有效的方法)
  • 原理:在用户会话中生成一个随机的、不可预测的令牌,并将其嵌入到表单或请求参数中。当服务器收到敏感请求时,会校验这个令牌是否与会话中保存的一致。
  • 流程
    1. 用户访问一个包含表单的页面时,服务器生成一个随机 Token,放在表单的隐藏域和用户的 Session 里。
    2. 用户提交表单时,这个 Token 会随着表单数据一起提交。
    3. 服务器比对表单中的 Token 和 Session 中的 Token,一致则通过,不一致则拒绝。
  • 为何有效:攻击者无法提前知晓或预测这个 Token,因此他构造的恶意请求中无法包含正确的 Token。
3. 双重 Cookie 验证
  • 原理:将 Cookie 中的某个值(如 __csrf)也作为请求参数发送。服务器校验参数中的值和 Cookie 中的值是否一致。
  • 为何有效:攻击者可以诱导用户发送 Cookie,但他无法读取到 Cookie 的内容(因为同源策略),因此他无法将正确的 Cookie 值作为参数放入请求中。
4. SameSite Cookie 属性(现代浏览器的利器)
  • 原理:这是一种由浏览器提供的、从源头解决问题的方案。在设置 Cookie 时,可以指定 SameSite 属性。
    • SameSite=Strict:最严格,完全禁止第三方 Cookie。用户从 evil.com 链接点击到 bank.com,浏览器也不会发送 Cookie。
    • SameSite=Lax:宽松模式,对于安全的 HTTP 方法(如 GET)允许在跨站跳转时携带 Cookie,但对于不安全的(如 POST)则禁止。这是目前很多站点的默认选择。
    • SameSite=None:无限制,但必须与 Secure 属性(仅限 HTTPS)一同使用。

总结

特性描述
攻击名称CSRF(跨站请求伪造)
攻击目标利用用户的登录状态,以用户名义执行非自愿操作
核心漏洞网站完全信任来自浏览器、带有正确 Session Cookie 的请求
防御核心增加攻击者无法伪造的凭证
最佳实践CSRF Token + SameSite Cookie 属性 组合使用
http://www.dtcms.com/a/520616.html

相关文章:

  • 网站设计开发建设公司网站行高
  • Vue中的指令
  • Redis黑马点评 day01
  • go kratos手动更新依赖
  • 怎么看网站开发的技术百度交易平台
  • 虚拟交易网站开发网站流量图怎么做
  • OpenTelemetry Agent直接到Jaeger链路跟踪
  • Monorepo系列:Pnpm Workspace 搭建 Monorepo
  • 有没有专门做字体排版设的网站实时热点新闻事件2021
  • 【开题答辩全过程】以 基于BS模式的图书馆管理系统为例,包含答辩的问题和答案
  • Java循环结构全解析:从基础用法到性能优化(含经典案例)
  • C 位域:核心地带,引领技术前沿
  • 鹤壁专业做网站公司前端培训心得
  • python-87-Pyinstaller打包在没有安装Python的电脑上运行
  • 海北高端网站建设多少钱网站后台登陆密码破解
  • CrewAI 核心概念(Knowledge)篇
  • 预检查和表单提交
  • [MySQL] 数据库设计
  • 数据处理像搭乐高?详解 RAGFlow Ingestion Pipeline
  • 模仿网站属于侵权吗做网站视频是什么专业
  • 汽车转向控制 / 线控转向介绍——控制技术——智能驾驶专栏
  • 基于KSP密钥管理系统的汽车 ECU JTAG 调试接口动态授权与安全管控
  • 世界经理人网站手机版学生网页网站制作软件大全
  • 企业网站带新闻发布功能的建站wordpress文章显示颜色
  • SpringBoot-Web开发之Web原生组件注入
  • Spring Cloud - Spring Cloud 本地配置(本地配置概述、本地配置实现)
  • 青岛商城网站建设长春建设平台网站的公司
  • 这几年做网站怎么样wordpress adsense主题
  • 做视频网站服务器怎么选择12306网站开发时间
  • 如何做家教网站赚钱如何申请国外网站