本文目录导读:

- 使用CSRF令牌(最主流的方法)
- 验证请求的来源
- 使用SameSite Cookie属性(现代浏览器的天然防御)
- 双重提交Cookie
- 关键操作增加二次确认
- 避免使用GET请求执行状态更改
- 使用自定义请求头
- 防止JSON/API接口的CSRF
- 综合防护建议
- 补充:CSRF本质与常见误区
防范跨站请求伪造(CSRF)的核心原则是确保请求的来源合法性和用户意图的明确性,以下是具体且有效的防护措施:
使用CSRF令牌(最主流的方法)
- 原理:服务器生成一个唯一、随机的令牌,嵌入到表单或请求头中,提交请求时,服务器验证令牌是否匹配。
- 实施:对于所有更改状态的操作(如POST、PUT、DELETE),必须携带该令牌,令牌应绑定用户会话,且每次会话更新一次(或每次请求刷新)。
- 示例:
<input type="hidden" name="_csrf_token" value="随机值">。 - 注意:令牌不能通过Cookie传递(否则会被自动携带),应通过表单字段或自定义请求头传递。
验证请求的来源
- 检查Origin或Referer头:
- 服务器端验证请求头中的
Origin(更可靠)或Referer(可能缺失或伪造,但仍有作用)。 - 白名单机制:只允许来自可信域名的请求。
- 服务器端验证请求头中的
- 注意事项:部分浏览器或隐私设置可能不发送这些头(如HTTPS→HTTP),因此应结合其他方法使用。
使用SameSite Cookie属性(现代浏览器的天然防御)
- 设置:在Cookie中增加
SameSite属性,可设为Strict或Lax。Strict:完全禁止跨站携带Cookie(适用于敏感操作)。Lax:允许导航到目标网址的GET请求携带Cookie(适用于普通链接)。
- 效果:浏览器自动阻止跨域请求携带Cookie,使CSRF攻击失效。
- 注意:需要用户浏览器支持(现代主流浏览器均已支持),且对旧版浏览器需保留其他防御。
双重提交Cookie
- 原理:服务器要求每个请求同时包含一个Cookie中的随机值和一个请求头(或请求体)中的相同值,由于攻击者无法读取目标站点的Cookie,无法构造正确的双重提交。
- 适用场景:适合无状态API或无法使用令牌的简单场景。
关键操作增加二次确认
- 方式:对高危操作(如转账、删除账号)要求用户输入密码、验证码(如图形验证码、短信验证码)或进行生物识别。
- 效果:即使请求被伪造,攻击者也无法通过验证。
避免使用GET请求执行状态更改
- 原则:遵循HTTP动词语义——GET只用于读取,POST/PUT/DELETE用于写入,这能减少CSRF利用GET触发的风险(例如通过图片标签的
src属性发起GET请求)。
使用自定义请求头
- 原理:在AJAX或API请求中添加自定义头(如
X-Requested-With: XMLHttpRequest),由于跨域请求无法自动携带自定义头(除非预检请求允许),可有效过滤简单CSRF。 - 适用场景:前后端分离项目,配合CORS策略使用。
防止JSON/API接口的CSRF
- 方法:对于RESTful API,要求所有写操作必须携带
application/json的Content-Type,并验证令牌或头,简单表单提交(如application/x-www-form-urlencoded)本身容易利用,需重点保护。
综合防护建议
- 多层级结合:不要依赖单一方法,SameSite Cookie + CSRF令牌 + 来源检查”可大幅降低风险。
- 框架集成:现代Web框架(如Spring Security、Django、Express.js的csurf模块)已内置CSRF保护,建议直接使用。
- 定期测试:使用安全扫描工具或手动测试(如通过Burp Suite构造跨站请求)验证防护有效性。
补充:CSRF本质与常见误区
- 关键点:CSRF不窃取Cookie,而是利用用户已认证的会话发起恶意请求,因此不能仅靠HTTPS或加密Cookie来防御。
- 误伤排除:避免使用Referer作为唯一验证(某些合法跳转可能不携带),以及注意Token的泄漏(如果被XSS获取,则防御失效——所以必须同时防范XSS)。
通过上述措施的组合,可以显著降低CSRF攻击成功概率,对于高安全需求场景(如金融、医疗),建议使用Token + SameSite + 二次验证的三重保护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播