CSRF--跨站请求伪造

server/2024/12/3 0:57:24/
什么是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.ppmy.cn/server/146884.html

相关文章

【k8s深入理解之 Scheme 补充-4】理解资源的内外部版本(存放位置不同、版本转换函数自动生成、版本新增字段等)

附录1 | types 的存放位置&#xff08;为什么内部版本和外部版本在不同位置&#xff09; 为什么 apps 组的 internal 的 types.go 放在 k8s.io/kubernetes 项目中&#xff0c;而 v1 等版本的 types.go 放在 ks8.io/api 项目中 Kubernetes 将 API 类型划分为 internal 和外部版本…

Android 中 Swipe、Scroll 和 Fling 的区别

Android 中 Swipe、Scroll 和 Fling 的区别 Swipe&#xff08;滑动&#xff09;Scroll&#xff08;滚动&#xff09;Fling&#xff08;甩动&#xff09;三者之间的区别代码示例 (Fling)总结 在 Android 应用中&#xff0c;Swipe、Scroll 和 Fling 都是用户在触摸屏幕上进行的滑…

shell脚本练习(2)

1. 使用case实现成绩优良差的判断 2. for创建20用户 用户前缀由用户输入 用户初始密码由用户输入 例如&#xff1a;test01,test10 3. for ping测试指网段的主机 网段由用户输入&#xff0c;例如用户输入192.168.2 &#xff0c;则ping 192.168.2.10 --- 192.168.2.2…

MySQL索引与分区:性能优化的关键

在开发过程中&#xff0c;随着数据量的不断增长&#xff0c;MySQL 查询的性能问题会逐渐显现。特别是在大数据量下&#xff0c;查询变得越来越慢&#xff0c;甚至可能导致系统崩溃。为了优化查询&#xff0c;MySQL 提供了 分区&#xff08;Partitioning&#xff09; 和 索引&am…

文件比较和文件流

文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09;3.1 介绍&#xff1a…

关于otter监控告警使用

一、背景 近期在使用otter完成单机房单向同步时&#xff0c;常常遇到channel假死的情况&#xff0c;导致Pipeline同步停止&#xff0c;系统表数据同步停止&#xff0c;影响生产环境用户数据查询相关的功能&#xff0c;虽然事后能够通过停channel后再启用channel重新启用…

基于PHP的音乐网站的设计与实现

摘 要 本系统采用PHP编程语言和MySQL数据库技术搭载了Apache服务器&#xff0c;完成了基于PHP的音乐网站设计&#xff0c;通过此次毕 业论文的撰写我明白了对于论文的选题要精确&#xff0c;要明确&#xff0c;要有明确的见解&#xff0c;要有足够的论证和创意&#xff0c;必须…