CSRF 跨站请求伪造漏洞

server/2025/2/2 3:37:15/
http://www.w3.org/2000/svg" style="display: none;">

原理

当一个网站A使用Cookie,存储SessionToken来用于单点登录和权限操作时。浏览器将Cookie存储到浏览器中。当用户在访问另一个网站V时,黑客可以通过伪造表单,向网站A发送修改重要信息(如密码)、支付等操作,浏览器会自动携带Cookie。
在服务端看来这就是一个正常的请求,于是在用户不知情的情况下,做出响应。

两个条件

  1. 用户访问站点A并产生了Cookie
  2. 用户没有退出站点A(清除Cookie),就访问了黑客伪造表单的B网站

防御措施

CSRF一般发生在第三方网站,而且攻击者只是冒用登录凭证而不是获取登录凭证数据,所以,可以指定以下防范策略:

  • 阻止不明外部域名的访问
    • 同源检测
    • Sanmesite Cookie
  • 提交Form表单时,添加本域才能获取的验证信息
    • CSRF token

1. 同源检测

Cookie的同源和浏览器的同源策略有所区别:

  • 浏览器同源策略:协议、域名和端口号都相同即同源
  • Cookie同源策略:域名相同即同源

在HTTP协议中,每个异步请求都会携带两个header,用来标记来源域名:

  • Origin Header
  • Referer Header

这两个Header在浏览器发送请求时,大多数情况会自动带上,并不能由前端修改,服务器接收到后,根据这两个Header来确定来源的域名。

另外,CSRF大多数情况下来自第三方域名,但并不能排除本域发起。如果攻击者有权限在本域发布评论(含链接、图片等),那么它可以直接在本域发起攻击,这种情况下同源策略无法达到防护的作用。

综上所述:同源验证是一个相对简单的防范方法,能够防范绝大多数的CSRF攻击。但这并不是万无一失的,对于安全性要求较高,或者有较多用户输入内容的网站,我们就要对关键的接口做额外的防护措施。

2. Samesite Cookie属性

Cookie的Sanmesite属性用来限制第三方Cookie,从而减少安全风险,它有三个值:

Set-Cookie: SameSite = Strict; // 最为严格,完全禁止跨站点时发送Cookie
Set-Cookie: SameSite = Lax; // 只有GET请求发送
Set-Cookie: SameSite = None; // 关闭SameSite属性,但必须设置Secure属性,如下
Set-Cookie: SameSite = None  // 无效
Set-Cookie: SameSite = None; Secure  // 有效

设置了StrictLax,基本就能阻止CSRF攻击,前提是浏览器支持SameSite属性。

3. CSRF token

CSRF攻击之所以能够成功是因为服务器把攻击者携带的Cookie当成了正常的用户请求,那么我们可以要求所有用户请求都携带一个无法被攻击者劫持的token,每次请求都携带这个token,服务端通过校验请求是否为正确token,可以防止CSRF攻击。

CSRF token的防护策略分为三步:

  1. 将token输出到页面
    首先,用户打开页面的时候,服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。
  2. 请求中携带token
    对于GET请求,将token附在请求地址之后,如:http://url?token=tokenValue
    对于POST请求,要在Form表单后面加上
	<input type=”hidden” name=”token” value=”tokenvalue”/>
  1. 服务器验证token是否正确
    服务端拿到客户端给的token后,先解密token,再比对随机字符串是否一致,时间是否有效,如果字符串对比一致且在有效期内,则说明token正确。

总结

简单总结一下上文的CSRF攻击的防护策略:

  • 自动防护策略:同源检测(OriginReferer验证);
  • 主动防护策略:token验证以及配合SameSite设置;
  • 保护页面的幂等性,不要再GET请求中做用户操作

为了更好的防御CSRF,最佳实践应该是结合上面总结的防御措施方式中的优缺点来综合考虑,结合当前Web应用程序自身的情况做合适的选择,才能更好的预防CSRF的发生。


http://www.ppmy.cn/server/164239.html

相关文章

深入剖析 Docker 的镜像分层存储机制

目录 一、基本原理 镜像构成 UnionFS 二、工作方式 镜像构建时 容器启动时 三、优势 共享与复用 高效存储和传输 快速镜像构建 可追溯性和可维护性 四、相关命令 查看镜像分层 基于已有镜像创建新镜像 Docker 凭借其卓越的性能和极高的灵活性,已然成为众多开发者…

算法随笔_30: 去除重复字母

上一篇:算法随笔_29:最大宽度坡_方法3-CSDN博客 题目描述如下: 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; …

汽车网络信息安全-ISO/SAE 21434解析(中)

目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…

Docker 仓库管理

Docker 仓库管理 引言 随着容器技术的兴起,Docker 已成为最流行的容器化平台之一。在Docker的生态系统中,仓库(Repository)是至关重要的组成部分。一个有效的仓库管理策略可以帮助开发者更高效地构建、测试、部署和管理容器应用。本文将深入探讨Docker仓库管理的相关知识…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;项目基本介绍 &#x1f6a6;项…

高级java每日一道面试题-2025年01月24日-框架篇[SpringMVC篇]-SpringMVC常用的注解有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: SpringMVC常用的注解有哪些? 我回答: 一、核心注解详解 1. Controller 作用&#xff1a;将一个普通的Java类标记为处理请求的控制器。 应用场景&#xff1a;在Spring MVC中起到了路由请求和处理业务逻辑的作用&#xff0c;并注册…

春节假期旅游热潮下,景区医疗安全如何全面升级?

随着旅游业的不断繁荣&#xff0c;春节假期期间&#xff0c;各大景区再次迎来了游客的高峰期。面对如此庞大的客流量&#xff0c;景区不仅要在服务接待上下功夫&#xff0c;更要将医疗安全保障工作提升到新的高度。那么&#xff0c;在旅游高峰期&#xff0c;景区应该如何有效应…

第04章 08 VTK Filter 的组成与运作原理

在 VTK&#xff08;Visualization Toolkit&#xff09;中&#xff0c;Filter 是处理和转换数据的核心组件。它们用于对输入数据进行各种操作&#xff0c;如几何变换、数据过滤、属性计算等&#xff0c;并生成新的输出数据。Filter 的组成与运作原理是 VTK 数据处理流程的关键。…