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

CSRF--跨站请求伪造

什么是CSRF?

CSRF是一种通过伪造用户身份来完成未授权操作的攻击方式。攻击者利用受害者已登录状态下的身份凭证(如Cookie),在受害者不知情的情况下发送恶意请求,从而让目标系统执行攻击者意图的操作。


CSRF的攻击原理
  1. 用户登录到受信任的网站A,并生成了有效的会话凭证(如Cookie)。
  2. 用户未注销网站A,保持登录状态。
  3. 用户访问了攻击者控制的恶意网站B。
  4. 恶意网站B向网站A发送请求(可能是表单提交、图片加载、JavaScript等)。
  5. 网站A根据请求中的Cookie认为请求是合法的,并执行操作。

CSRF的典型攻击场景
  1. 恶意资金转账
    • 攻击者诱导用户点击恶意链接,触发对银行系统的资金转账请求。
  2. 账户信息更改
    • 攻击者伪造请求更改受害者的个人信息、密码或邮箱。
  3. 发送恶意请求
    • 利用受害者身份在论坛、社交平台等发布垃圾信息。

CSRF的危害
  • 身份盗用: 攻击者冒充受害者执行敏感操作。
  • 数据泄露: 可能修改或窃取用户数据。
  • 系统破坏: 利用管理员权限删除资源或更改系统设置。

CSRF的防御措施
1. 使用CSRF Token
  • 在表单或请求中附加一个随机生成的唯一Token。
  • 服务器验证Token是否匹配,避免伪造请求。
  • 示例:

    <input type="hidden" name="csrf_token" value="random_token_value">

  • 服务端校验:

    if request.form['csrf_token'] != session['csrf_token']: return "Invalid CSRF Token"

2. 验证Referer或Origin
  • 检查请求头的Referer或Origin字段,确认请求来源是否是合法域名。
  • 缺点:可能被中间代理或浏览器禁用。
3. 使用SameSite Cookie
  • 设置Cookie的 SameSite 属性,限制跨站请求时携带Cookie。

    Set-Cookie: sessionid=abc123; SameSite=Strict

  • 值说明:
    • Strict:禁止所有跨站点请求携带Cookie。
    • Lax:允许部分安全的跨站请求(如GET表单提交)。
4. 要求用户验证
  • 在执行敏感操作前,要求用户输入密码或进行二次验证。
5. 避免GET请求执行敏感操作
  • 使用POST方法处理修改或删除类的操作,避免通过GET暴露。
6. 限制跨域请求
  • 使用CORS(跨域资源共享)策略,限制跨站请求访问。
7. 设置验证码
  • 重要操作前通过验证码确认用户身份,防止自动化攻击。

CSRF与XSS的区别
特性CSRFXSS
攻击对象服务器客户端浏览器
利用方式借助用户已登录状态伪造请求注入恶意脚本并在用户浏览器中执行
攻击目的伪造用户请求执行未授权操作窃取用户数据、会话或诱导执行恶意操作
主要防御手段CSRF Token、SameSite Cookie、Referer验证输入验证、输出转义、内容安全策略(CSP)

总结

CSRF通过利用用户身份欺骗服务器,可能导致严重的业务风险。为了有效防御CSRF攻击,应综合使用CSRF Token、Referer验证、SameSite Cookie等技术手段,结合合理的请求设计和用户身份验证机制,从根本上消除隐患。


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

相关文章:

  • 44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言
  • 探索 GAN 的演变之路
  • 【C++ 算法进阶】算法提升二十三
  • FreeRTOS之链表源码分析
  • 非交换几何与黎曼ζ函数:数学中的一场革命性对话
  • LabVIEW实现TCP/IP通信
  • 计算机网络八股整理(一)
  • 每日一题 LCR 060. 前 K 个高频元素
  • Spring Boot 3.4.0 发行:革新与突破的里程碑
  • 移动充储机器人“小奥”的多场景应用(下)
  • 103.【C语言】数据结构之TopK问题详细分析
  • Linux:基础开发工具
  • 信息系统项目管理师(第四版)概要
  • pip安装github上的开源软件包
  • 基于Java Springboot高校网上订餐平台
  • 了解 CSS position 属性
  • 嵌入式linux系统中图像处理基本方法
  • STM32C011开发(2)----nBOOT_SEL设置
  • 机器学习知识点
  • 拿下域名vip#bj
  • 软件工程第20、21章小测
  • 用Scala来解决成绩排名的相关问题
  • SQL server数据库
  • ffmpeg.js视频播放(转换)
  • R和Julia免疫细胞映射到组织切片
  • C语言嵌入式编程实战指南(二):高级技术和最佳实践