Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)
文章目录
- OWASP 2023 TOP 10
- CSRF 导图
- CSRF的基本概念
- CSRF的工作原理
- 常见CSRF攻击模式
- CSRF防御策略
- 补充建议
- 应用场景实战
- 防御策略选择
- 1. CSRF Token(首选)
- 2. SameSite Cookie属性
- 3. 验证Referer和Origin
- 4. 多因素认证
- 实现方案
- CSRF Token实现
- SameSite Cookie设置
- Referer和Origin头验证
- 多因素认证 (MFA)
OWASP 2023 TOP 10

OWASP Top 10 概述
OWASP (Open Web Application Security Project) Top 10 是一份最常见和最危险的Web应用安全风险列表,由安全专家定期更新。 旨在提高开发人员、测试人员以及组织的安全意识并帮助他们预防这些漏洞。
2023年OWASP Top 10 列表

主流防范措施
-
Broken Access Control
- 描述:未能正确执行访问控制,允许用户访问他们不应该拥有的权限或资源。这可能导致数据泄露、数据篡改等问题。
- 防御措施:严格实施基于角色的访问控制(RBAC),并确保敏感操作具有足够的授权检查。
-
Cryptographic Failures
- 描述:不当的加密实践或加密算法的使用不当,可能导致敏感数据(如密码、信用卡信息)被暴露或窃取。
- 防御措施:使用最新的加密标准(如AES-256-GCM、RSA-2048),并避免使用弱或过时的加密算法。
-
Injection
- 描述:应用未能对用户输入进行有效的验证或转义,导致恶意代码注入(如SQL注入、命令注入)并执行在服务器上。
- 防御措施:使用参数化查询、输入验证、输出转义技术,避免拼接SQL或动态代码。
-
Insecure Design
- 描述:系统在设计阶段未考虑安全问题,导致应用架构中的基本安全漏洞。
- 防御措施:在开发生命周期中引入威胁建模、攻击面分析等设计阶段的安全审查。
-
Security Misconfiguration
- 描述:错误的配置(如不安全的默认设置、过时的软件或未配置的安全功能),可能使应用程序面临攻击。
- 防御措施:定期审计和测试系统配置,使用自动化工具识别和修复配置问题。
-
Vulnerable and Outdated Components
- 描述:使用了具有已知漏洞或未及时更新的第三方库和组件,可能被攻击者利用。
- 防御措施:确保使用依赖管理工具(如Maven、npm),并定期更新组件,避免使用过时的版本。
-
Identification and Authentication Failures
- 描述:认证和身份验证流程中的缺陷,可能导致用户冒充、会话劫持等问题。
- 防御措施:实施强密码策略、使用多因素认证(MFA)和加固会话管理机制。
-
Software and Data Integrity Failures
- 描述:未能保证软件更新和数据的完整性,可能使攻击者篡改关键数据或上传恶意更新。
- 防御措施:使用签名机制来验证更新包的完整性,确保数据在传输和存储过程中的可靠性。
-
Security Logging and Monitoring Failures
- 描述:缺乏适当的日志记录和监控,无法有效检测、响应或追踪安全事件。
- 防御措施:实施集中化的日志记录、主动的监控和告警系统,确保能够及时发现并响应异常行为。
-
Server-Side Request Forgery (SSRF)
- 描述:攻击者通过伪造服务器端的请求来获取未授权的内部资源或数据,通常利用未受限制的服务器端请求机制。
- 防御措施:限制服务器端可以发起的请求范围,避免允许用户输入直接控制服务器端的请求参数。
重点风险与防御措施建议
-
Broken Access Control:最重要的防御措施是定期审查权限设计,确保每个用户只能访问必要的资源。建议结合应用的访问控制系统与自动化测试工具,确保权限配置不被篡改。
-
Cryptographic Failures:确保敏感数据加密和密钥管理机制符合行业标准,如使用硬件安全模块(HSM)来保护密钥。避免明文传输或存储敏感数据。
-
Injection:对于Web应用来说,防止注入攻击的最佳实践是始终使用参数化查询和预编译的语句。严禁直接拼接用户输入构建SQL或命令。
-
Security Misconfiguration:安全配置管理应作为持续改进的一部分,尤其是在引入新服务或更新系统时,保持自动化的安全配置审计机制至关重要。
-
SSRF:严格限制后端服务器能够访问的网络和资源,禁止对内部资源(如metadata或本地IP)发起请求。
CSRF 导图

CSRF的基本概念
CSRF (Cross-Site Request Forgery,跨站请求伪造) 是一种攻击方式,攻击者诱导用户在不知情的情况下发起非授权的请求。例如,用户在登录某个站点后,攻击者通过社交工程等手段诱使用户点击包含恶意请求的链接,利用用户已登录的状态,发起用户意图之外的操作,如转账、修改账户设置等。
CSRF的工作原理
- 用户登录受信任的站点A,并保持登录状态(通常通过cookie维持会话)。
- 攻击者在站点B或通过电子邮件等媒介诱导用户点击恶意链接,或者自动加载某些恶意内容。
- 浏览器在访问该恶意内容时自动带上站点A的cookie,导致恶意请求被认为是用户发起的合法请求。
- 站点A由于没有进行足够的防御措施,处理了该请求,执行了不符合用户预期的操作。
常见CSRF攻击模式
- GET请求攻击:攻击者构造包含恶意查询参数的URL,并诱导用户点击或自动加载该URL。
- POST请求攻击:攻击者通过隐藏的表单或JavaScript脚本在后台发送恶意POST请求。
- 第三方内容加载:攻击者通过iframe、img等方式嵌入恶意请求,利用用户的认证状态。
CSRF防御策略
-
使用CSRF Token:在每次受保护的请求中,服务器生成一个唯一的CSRF Token,注入到表单或请求头中。服务器接收到请求时,检查Token的有效性。由于攻击者无法获取该Token,恶意请求将被服务器拒绝处理。
- Synchronizer Token Pattern:服务器在用户的每个会话中生成唯一的Token,嵌入到页面的表单或请求中,服务器在处理请求时验证这个Token。
- Double Submit Cookie:在页面中嵌入一个Token,同时将该Token保存在cookie中,服务器在接收到请求时对比两个Token的值。
-
使用SameSite Cookie属性:通过将cookie的SameSite属性设置为"Strict"或"Lax",限制跨站请求时自动发送cookie。此属性允许服务器防止来自外部站点的请求利用用户的认证状态。
- Strict模式:完全禁止跨站点发送cookie,适用于高度安全要求的应用场景。
- Lax模式:在安全性和用户体验之间做权衡,允许某些跨站请求(如GET请求)发送cookie,但限制POST请求。
-
验证Referer和Origin头:服务器可以检查请求的
Referer或Origin头,确保请求来源于合法的站点。虽然不总是可靠,但可以作为额外的安全防线。 -
多因素认证(MFA):对于敏感操作,可以要求用户进行额外的身份验证,如验证码或短信验证,防止攻击者即便利用用户的认证状态,也无法完成关键操作。
-
使用CAPTCHA:通过在敏感请求前引入CAPTCHA,阻止自动化脚本提交伪造请求。
补充建议
- 最小化攻击面:限制敏感操作的请求方法,比如将敏感操作从GET转为POST,并确保所有修改数据的操作都经过授权验证。
- 对API接口的保护:对于RESTful API等接口,应确保请求都包含CSRF防护机制,特别是在允许跨域请求的情况下(如CORS)。
应用场景实战
假设场景为一个典型的Web应用,涉及用户登录、账户操作、表单提交等敏感操作。该应用具备以下特点:
- 用户通过登录操作获得会话,并使用Cookie维持会话状态。
- 存在表单提交和数据修改操作。
- 系统允许跨域请求访问部分资源。
主要风险包括:
- 恶意用户通过构造跨站请求,伪造受害者身份执行操作。
- 特别是在敏感操作(如修改密码、交易等)上,CSRF的风险尤为显著。
防御策略选择
基于应用场景,综合考虑以下策略:
1. CSRF Token(首选)
- 对于所有用户提交表单的敏感操作(如账户设置、转账等),服务器生成并验证CSRF Token。这是最可靠的防御机制。
- 适用范围:几乎所有敏感操作场景,尤其是表单提交。
2. SameSite Cookie属性
- 针对GET请求或跨站资源请求较多的场景,推荐设置
SameSite=Lax或Strict。这可以有效防止浏览器自动发送Cookie给外部站点。 - 适用范围:较轻量级的场景,防止未经认证的跨站请求。
3. 验证Referer和Origin
- 对于一些简单场景,可以在服务器端检查Referer和Origin头部,以确保请求来自合法的站点。
- 适用范围:非敏感的、依赖浏览器的操作场景(可以作为辅助手段)。
4. 多因素认证
- 针对特别敏感的操作,如账户资金转移或密码修改,建议在执行操作前增加MFA(多因素认证),如短信验证或二次密码确认。
- 适用范围:极为敏感的用户操作,特别是涉及资金或安全的功能。
实现方案
CSRF Token实现
Spring Security框架自带CSRF防护机制,默认保护所有需要修改数据的HTTP方法(POST、PUT、DELETE)。如果是REST API,可按如下方式进行配置:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {// 启用CSRF保护http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());// 配置保护哪些请求http.authorizeRequests().antMatchers("/sensitive-endpoints/**").authenticated().anyRequest().permitAll();}
}
CookieCsrfTokenRepository.withHttpOnlyFalse()会将CSRF Token存储在Cookie中,并在客户端的表单中嵌入,防止跨站请求。
SameSite Cookie设置
可以在Spring Boot中设置SameSite属性来防御跨站请求:
@Bean
public ServletContextInitializer initializer() {return servletContext -> {SessionCookieConfig sessionCookieConfig = servletContext.getSessionCookieConfig();sessionCookieConfig.setHttpOnly(true); // 防止XSS攻击sessionCookieConfig.setSecure(true); // 只允许HTTPS请求sessionCookieConfig.setSameSite("Lax"); // 设置SameSite属性};
}
- 这里配置了
SameSite=Lax,确保敏感的POST请求不会被跨站发送。
Referer和Origin头验证
对某些关键操作(如密码修改),可以手动添加对请求头的验证:
@RequestMapping(value = "/change-password", method = RequestMethod.POST)
public ResponseEntity<String> changePassword(HttpServletRequest request) {String referer = request.getHeader("Referer");String origin = request.getHeader("Origin");if (referer == null || !referer.startsWith("https://yourdomain.com")) {return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid referer");}if (origin == null || !origin.equals("https://yourdomain.com")) {return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid origin");}// 执行密码修改逻辑return ResponseEntity.ok("Password changed successfully");
}
- 在此场景中,只有合法的Referer和Origin请求才会被接受。
多因素认证 (MFA)
针对特别敏感的操作,例如转账或修改密码,可以通过引入短信验证或Google Authenticator等方式实现多因素认证:
@RequestMapping(value = "/transfer", method = RequestMethod.POST)
public ResponseEntity<String> transfer(@RequestParam String token, HttpServletRequest request) {// 验证MFA Tokenboolean isValid = mfaService.verifyToken(token);if (!isValid) {return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid MFA token");}// 执行转账操作return ResponseEntity.ok("Transfer successful");
}

相关文章:
Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)
文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token(首选)2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…...
C++游戏开发完整学习路径
C游戏开发完整学习路径 引言 随着游戏行业的迅速发展,C作为主要的游戏开发语言,因其高效性和灵活性,依然受到广泛欢迎。C不仅在大型游戏开发中被广泛使用,而且在游戏引擎的构建、性能优化和复杂算法的实现中也扮演着关键角色。本…...
vue3之 shallowRef、markRaw
shallowRef 用于创建一个浅层响应式引用,只对顶层属性进行响应式处理。 markRaw 用于标记一个对象,使其完全跳过 Vue 的响应式系统。 这两者都可以用于优化性能,避免不必要的响应式开销,特别是在处理大型对象或第三方库对象时。 …...
影刀RPA实战:操作Mysql数据库
1.摘要 影刀RPA(Robotic Process Automation)是一种软件自动化工具,它可以模拟人类用户执行各种重复性任务,其中包括对数据库的操作。 我们可以使用软件自动化指令,通过获取数据库窗口对象来操作数据库,也…...
【c++】c++11多线程开发
2 C多线程 本文是参考爱编程的大丙c多线程部分内容,按照自己的理解对其进行整理的一篇学习笔记,具体一些APi的详细说明请参考大丙老师教程。 代码性能的问题主要包括两部分的内容,一个是前面提到资源的获取和释放,另外一个就是多…...
PW37R_V1 产品规格书
概述 PW37R_V1是一款采用3.7英寸黑白红三色电子纸显示的电子标签,采用一种先进的无线自动更新系统,实现无线传输。 通过http,mqtt协议更新数据和控制该款电子标签的显示等操作,显示内容可自定义。内置电池供电,可Typ…...
android11 usb摄像头添加多分辨率支持
部分借鉴于:https://blog.csdn.net/weixin_45639314/article/details/142210634 目录 一、需求介绍 二、UVC介绍 三、解析 四、补丁修改 1、预览的限制主要存在于hal层和framework层 2、添加所需要的分辨率: 3、hal层修改 4、frameworks 5、备…...
【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)
本文项目编号 T 020 ,文末自助获取源码 \color{red}{T020,文末自助获取源码} T020,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
JavaScript全面指南(二)
🌈个人主页:前端青山 🔥系列专栏:Javascript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南(二) 目录 21、说明如何使用JavaScript提交表单? 2…...
Nginx:Linux配置Nginx
目录 一、环境安装1.1 GCC编译器1.2 PCRE1.3 Zlib1.4 OpenSSL1.5 快速下载 二、Nginx源码简单安装2.1 下载安装包2.2 解压2.3 进入资源文件中2.4 编译、安装 三、Yum安装四、Nginx源码复杂安装4.1 参数介绍4.2 参数配置 五、卸载Nginx5.1 关闭Nginx进程5.2 将安装的Nginx删除5.…...
WebRTC音频 04 - 关键类
WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架 WebRTC音频 04 - 关键类(本文) 一、前言: 在WebRTC音频代码阅读过程中,我们发现有很多关键的类比较抽象,搞不清楚会导致代码阅读一脸懵逼。比如…...
Elasticsearch:Redact(编辑) processor
Redact 处理器使用 Grok 规则引擎来隐藏输入文档中与给定 Grok 模式匹配的文本。该处理器可用于隐藏个人身份信息 (Personal Identifying Information - PII),方法是将其配置为检测已知模式,例如电子邮件或 IP 地址。与 Grok 模式匹配的文本将被替换为可…...
O2OA结合备份脚本和定时任务进行数据库的备份,我们以MySQL数据库为例
概述 系统运行一段时间后,可能发生各种情况导致数据丢失,如硬件故障、人为错误、软件错误、病毒攻击等。定期备份可以帮助您保护数据免受这些风险的影响,以便在需要时能够恢复数据。 O2OA应用本身可以通过dump配置每天自定备份数据ÿ…...
Python自动化办公:批量提取PDF中的表格到Excel
在现代办公环境中,处理大量的PDF文件并提取其中的表格数据是一项常见而繁琐的任务。手动复制粘贴不仅耗时耗力,还容易出错。Python作为一种功能强大的编程语言,提供了丰富的工具包,可以高效地解决这一问题。本文将介绍如何使用Pyt…...
selenium有多个frame页时的操作方法(5)
之前文章我们提到,在webdriver.WebDriver类有一个switch_to方法,通过switch_to.frame()可以切换到不同的frame页然后才再定位某个元素做一些输入/点击等操作。 比如下面这个测试网站有2个frame页:http://www.sahitest.com/demo/framesTest.h…...
谷歌外链的周期性维护!
外链建设不是一次性的工作,它需要长期的维护和更新,才能持续为网站带来稳定的流量和SEO提升。很多网站在初期通过短期内大规模获取外链的方式,确实能看到排名的提升,但这种方法往往难以维持长期的效果。谷歌更喜欢自然、持续增长的…...
CATIA软件许可管理最佳实践
在当今的工程设计领域,CATIA软件已成为众多企业不可或缺的工具。然而,随着软件使用的广泛普及,许可管理变得尤为关键。本文将为您探讨CATIA软件许可管理的最佳实践,助您在确保合规性的同时,实现成本效益的最大化。 一、…...
大华智能云网关注册管理平台 SQL注入漏洞复现(CNVD-2024-38747)
0x01 产品简介 大华智能云网关注册管理平台是一款专为解决社会面视频资源接入问题而设计的高效、便捷的管理工具,平台凭借其高效接入、灵活部署、安全保障、兼容性和便捷管理等特点,成为了解决社会面视频资源接入问题的优选方案。该平台不仅提高了联网效率,降低了联网成本,…...
什么是思维导图,手把手教你做经典思维导图
在信息爆炸的时代,如何高效整理思绪、激发创意、提升学习效率成为了我们共同面临的挑战。思维导图,这一源自脑科学的思维工具,以其直观、灵活的特点,成为了众多学习者、管理者和创意人士的得力助手。今天,就让我们一起…...
使用GSEA读‘gmt文件‘时最后一行未遂问题解决
最近工作中,使用GSEA网站自定义库下载的gmt文件用函数读取的时候报错: 这种问题在文本文件读取中经常出现,往往因为最后一行未留出/n,也就是最后一行没有换行留出空行。 可以使用notepad打开gmt文件: 发现果然最后一行…...
【CP-05】RTE运行时环境 - SWC的操作系统接口
CP-05_RTE运行时环境【CP-05】RTE运行时环境 - SWC的“操作系统接口”前言在AUTOSAR架构中,RTE(Runtime Environment,运行时环境)是一个常被提及却难以理解的概念。它像是应用层软件组件(SW-C)与底层基础软…...
从多路复用到三维光阵:Arduino驱动8x8x8 LED立方体全解析
1. 项目概述:用Arduino点亮一个三维世界几年前,我第一次在创客展上看到一个8x8x8的LED立方体,那种由数百个光点构成的、在三维空间中流动的动画效果,瞬间就把我吸引住了。它不像普通的平面LED屏,而是真正有“深度”的光…...
37家金融客户紧急启用的DeepSeek扫描辅助加固包(含未公开API调用密钥策略)
更多请点击: https://kaifayun.com 第一章:DeepSeek漏洞扫描辅助的背景与战略价值 近年来,大模型在安全领域的应用正从辅助问答向深度协同防御演进。DeepSeek系列模型凭借其开源、高推理精度及强代码理解能力,成为构建智能化漏洞…...
Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件
Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件在游戏开发中,UI交互的流畅性和多样性直接影响玩家的游戏体验。想象一下,当你在开发一个RPG游戏的背包系统时,需要实现道具的单击查看详情、双击快速使用、…...
DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏
DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS手柄连接Windows电脑后无法识别而烦恼吗?🎮…...
告别DLL缺失烦恼!Visual C++运行库合集一键搞定Windows应用依赖问题
告别DLL缺失烦恼!Visual C运行库合集一键搞定Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开某个软件或游戏时…...
特定任务需求场景下的过约束并联机构构型设计与控制方法【附代码】
✨ 长期致力于曲面加工、构型综合、运动学和动力学建模、性能评价、多目标优化、滑模控制、鲁棒控制、视觉传感技术研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (…...
从零构建FOC轮腿机器人:开源平衡机器人完整指南
从零构建FOC轮腿机器人:开源平衡机器人完整指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | 一个…...
LPCM框架:大模型驱动的计算机架构设计革命
1. LPCM框架:计算机系统架构设计的范式革命计算机系统架构设计正站在历史性的转折点上。过去八十年来,从ENIAC的真空管到现代7纳米制程的异构计算芯片,架构设计始终遵循着"专家经验EDA工具"的传统范式。但随着摩尔定律逼近物理极限…...
2026数据治理平台选型:五款产品如何赋能数据中台建设?
一、引言:数据中台的成败,关键在治理在数字化浪潮的席卷下,“数据中台”已成为当代企业信息化架构中的核心战略组件。然而,一个悖论正困扰着大量企业:数据中台的基础设施搭建日趋完善,但真正将数据转化为业…...
