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

网络空间安全(19)CSRF攻防

一、简介

       跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络攻击方式。攻击者通过诱导受害者访问恶意页面,利用受害者在被攻击网站已经获取的注册凭证(如Cookie),绕过后台的用户验证,冒充受害者执行非预期的操作。CSRF攻击通常发生在第三方网站,而不是被攻击网站本身。

二、攻击原理

  1. 用户登录与Cookie生成

           用户使用浏览器登录受信任的网站A,并在登录后,网站A在用户的浏览器中生成Cookie。Cookie中通常包含用户的会话信息或认证信息。
  2. 浏览器自动携带Cookie

           当用户在同一会话下访问其他网页时,浏览器会自动携带该网站的Cookie。这是HTTP协议和浏览器的默认行为。
  3. 攻击者诱导访问恶意页面

           攻击者通过邮件、社交工程或其他途径诱导用户点击恶意链接,跳转到攻击者控制的网站B。
  4. 恶意页面发送请求

           网站B返回的页面包含一些攻击性代码,这些代码会自动向网站A发送请求,如转账、修改密码等。由于浏览器会自动携带存放在Cookie中的用户认证信息,攻击者可以伪造看似合法的请求。

三、攻击方式

  1. 伪造表单提交

           攻击者构造一个包含恶意表单的网页。当受害者访问该网页时,表单会自动提交,导致受害者的账户被恶意操作。例如,修改密码、转账等。
  2. GET请求劫持

           攻击者将恶意链接隐藏在图片、链接等元素中,诱导受害者点击。当受害者点击链接时,浏览器会发送一个GET请求,导致受害者的账户被恶意操作。例如,通过<img>标签的src属性指向恶意URL,触发GET请求。
  3. 结合钓鱼邮件或社交网络传播

           攻击者通过发送看似正常的钓鱼邮件,诱导用户点击邮件中的恶意链接或附件。这些链接或附件可能包含CSRF攻击代码。此外,攻击者还可以在社交网络上发布引诱用户点击的内容,如“点击获得免费礼品”等。

四、危害

  1. 未经授权的操作

           攻击者可以在受害者不知情的情况下,执行转账、修改密码、发布消息等敏感操作。
  2. 数据泄露和篡改

           攻击者可以窃取用户的敏感信息,如登录凭证、个人信息等。同时,还可以篡改用户的账户信息、订单信息等重要数据。
  3. 破坏网站安全

           通过CSRF攻击,攻击者可以删除网站数据、篡改网站设置等,破坏网站的正常运行。

五、防御策略

  1. 验证请求的来源

    • Origin验证:服务器端检查HTTP请求头中的Origin字段,确保请求来自同一源。
    • Referer验证:检查HTTP请求头中的Referer字段,确认请求是从原网站发出而不是从其他站点发出的。但需要注意的是,Referer字段可能会被禁用或伪造,因此不能完全依赖其来防范CSRF攻击。
  2. 使用验证码

           对于关键操作,如修改密码、转账等,可以要求用户输入验证码。这可以防止自动提交的恶意请求,但可能会影响用户体验。
  3. 使用CSRF令牌(Token)

    • 生成Token:服务器端在用户访问包含敏感操作的页面时,生成一个唯一的、具有足够随机性的CSRF令牌,并将其存储在用户的会话(Session)中。
    • 传递Token:将CSRF令牌嵌入到HTML表单的隐藏字段中,或者作为请求头的一部分传递。
    • 验证Token:服务器收到请求后,校验请求中的Token与会话中的Token是否一致,若不一致则拒绝请求。这种方法可以有效防止CSRF攻击,因为攻击者无法预测和伪造合法的Token。
  4. 设置合适的Cookie属性

    • HttpOnly:通过设置HttpOnly属性,可以防止JavaScript访问Cookie,从而提高安全性。
    • Secure:通过设置Secure属性,可以确保Cookie只能通过HTTPS协议发送,防止在HTTP协议下被窃取。
    • SameSite:将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。在Strict模式下,浏览器只会在同站点请求中发送Cookie;在Lax模式下,则允许在一些安全的跨站导航场景下发送Cookie。
  5. 实施双重认证机制

           对于特别敏感的操作,可以引入双重认证机制,如短信验证码、生物识别等,以增加攻击的难度。
  6. 避免使用GET请求进行敏感操作

           GET请求容易被攻击者利用来构造恶意链接,因此应尽量避免使用GET请求进行敏感操作。推荐关键交易API采用POST方式,以提高CSRF攻击成本。

总结

       CSRF攻击是一种常见的网络攻击方式,利用用户已登录的身份在目标网站上执行非授权操作。为了防范CSRF攻击,需要采取多种防御策略,包括验证请求来源、使用验证码、使用CSRF令牌、设置合适的Cookie属性、实施双重认证机制以及避免使用GET请求进行敏感操作等。同时,用户也应提高警惕,避免点击不明链接或访问可疑网站,以免成为CSRF攻击的受害者。

 结语      

技术的迷宫

探索的征途

!!!


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

相关文章:

  • 计算机视觉算法实战——老虎个体识别(主页有源码)
  • Python—类class复习
  • 【jstack查询线程信息】1.对比下arthas的thread 和jvm指令
  • 循环神经网络(RNN):时序建模的核心引擎与演进之路
  • 【C++】vector(下):vector类的模拟实现(含迭代器失效问题)
  • CEF 入门
  • 第6届传智杯复赛第一场
  • leetcode day27 455+376
  • EasyRTC嵌入式视频通话SDK的跨平台适配,构建web浏览器、Linux、ARM、安卓等终端的低延迟音视频通信
  • 20250307确认荣品PRO-RK3566开发板在Android13下的以太网络共享功能
  • 蓝桥杯 字符串拼接【省模拟赛】
  • 信息系统运行管理员教程9--大型网站运维
  • fastapi房产销售系统
  • langChainv0.3学习笔记(初级篇)
  • 入门到入土,Java学习day15(常用API下)
  • 【BAT紧急调整战略:解码深度求索的生态圈打法】
  • el-table(elementui)表格合计行使用以及滚动条默认样式修改
  • Pycharm 取消拼写错误检查(Typo:in word xxx)
  • QGIS制作流向图的完整指南
  • 基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装