Web安全:CSRF的攻击原理与防御措施

什么是 CSRF?

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种利用 浏览器自动携带 Cookie 的机制,诱骗用户在已登录目标网站的情况下,执行恶意操作的攻击方式。

攻击核心特点:

  • 攻击者 不需要窃取 Cookie,而是利用浏览器自动发送 Cookie 的机制。
  • 服务器无法区分 用户主动提交的请求和 恶意网站伪造的请求。

CSRF 攻击流程

示例场景(银行转账)

  1. 用户登录银行网站
    访问your-bank.com,服务器设置Cookie并返回:

    Set-Cookie: session_id=abc123; Secure; HttpOnly
    

    浏览器存储该 Cookie,后续访问 your-bank.com 时自动携带。

  2. 用户访问恶意网站
    恶意网站malicious.com隐藏了一个自动提交的表单:

       <form action="https://your-bank.com/transfer" method="POST">
         <input type="hidden" name="amount" value="10000">
         <input type="hidden" name="to_account" value="hacker">
       </form>
       <script>
         document.forms[0].submit(); // 自动提交
       </script>
    
  3. 浏览器发送伪造请求
    由于目标地址是your-bank.com,浏览器自动附加 Cookie

    POST /transfer HTTP/1.1
    Host: your-bank.com
    Cookie: session_id=abc123
    amount=10000&to_account=hacker
    

    服务器看到合法 session_id,执行转账,攻击成功!

CSRF 防御措施

(1)CSRF Token(最常用)

原理:服务器生成随机 Token,嵌入表单,提交时验证。
实现步骤:

  1. 服务器在渲染表单时生成 Token,存储(Session/Redis):
       <form action="/transfer" method="POST">
         <input type="hidden" name="csrf_token" value="RANDOM_STRING">
       </form>
    
  2. 提交请求时,服务器验证 Token 是否匹配:
       if request.cookies["session_id"] != user_session or request.form["csrf_token"] != stored_token:
           return "Invalid request!"
    
  3. 恶意网站无法获取 Token,伪造请求会被拒绝。

(2)SameSite Cookie(浏览器级防御)

通过设置 SameSite 属性,限制跨站请求携带 Cookie。
SameSite属性有三个值:

  • Strict模式‌(最严格、但可能影响用户体验)
    仅在请求来源与当前域名完全一致时发送Cookie,所有跨站请求均不携带。‌安全性最高,但可能影响用户体验(如从外部链接跳转时需重新登录)。‌‌
  • ‌Lax模式(推荐、默认值)
    允许在‌GET请求的顶级导航‌(如点击链接跳转)中发送Cookie,但禁止跨站的POST请求或其他非安全方法携带Cookie。‌‌平衡安全性与用户体验,成为主流浏览器的默认配置。‌‌
    Set-Cookie: session_id=abc123; Secure; HttpOnly; SameSite=Lax
    
  • None模式
    允许所有跨站点请求携带Cookie,但必须同时设置Secure属性(仅通过HTTPS传输)。‌‌

(3)检查 Referer/Origin 头

服务器检查 Referer(表示当前请求是从哪个 URL 页面发起的) 或 Origin (当前请求的 发起源,仅含协议 + 域名 + 端口,不含路径),判断请求来源是否合法。
缺点:Referer 可能被篡改或缺失,不适合作为唯一防护。

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值