0

0

什么是 CSRF 攻击,如何避免?

煙雲

煙雲

发布时间:2025-11-20 10:39:05

|

233人浏览过

|

来源于php中文网

原创

CSRF攻击利用浏览器自动携带用户认证信息的特点,诱导用户执行非本意操作。例如,用户登录银行网站后访问恶意页面,页面中的隐藏请求会携带Cookie自动发起转账。防御方法包括:使用Anti-CSRF Token验证请求合法性;检查Referer或Origin头确认来源;设置SameSite Cookie属性限制跨站发送;采用双重提交Cookie机制。开发中需确保敏感操作启用防护,API避免自动携带凭证,并在所有关键页面启用完整保护措施。

什么是 csrf 攻击,如何避免?

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种攻击方式,攻击者诱导用户在已登录的Web应用中执行非本意的操作。由于浏览器会自动携带用户的认证信息(如 Cookie),攻击者可以伪造请求,让用户在不知情的情况下提交敏感操作,比如修改密码、转账或删除数据。

CSRF 攻击是如何工作的?

假设你登录了银行网站 bank.com,浏览器保存了你的会话 Cookie。攻击者创建一个恶意页面,里面包含一个隐藏的表单或图片标签,指向银行的转账接口:

什么是 CSRF 攻击,如何避免?

当你访问这个恶意页面时,浏览器会自动带上你在 bank.com 的登录凭证发起请求,从而完成转账,而你完全不知情。

如何有效防御 CSRF?

防御的核心是确保每个敏感请求都来自合法的用户操作,而不是被第三方诱导发起。以下是几种常用方法:

GitHub Copilot
GitHub Copilot

GitHub AI编程工具,实时编程建议

下载
  • 使用 Anti-CSRF Token:服务器在返回页面时嵌入一个随机生成的 token(通常放在表单隐藏字段或自定义 HTTP 头中)。每次提交请求时,服务器验证该 token 是否匹配。由于攻击者无法获取 token,伪造请求将失败。
  • 检查 Referer 或 Origin 头:服务器可以检查请求的 Referer 或 Origin 字段,确认请求是否来自可信域名。虽然可绕过,但作为辅助手段有一定效果。
  • SameSite Cookie 属性:设置 Cookie 时添加 SameSite=StrictSameSite=Lax,可防止浏览器在跨站请求中自动发送 Cookie。Lax 模式允许安全的 GET 请求,适合大多数场景。
  • 双重提交 Cookie:将 CSRF token 同时写入 Cookie 和请求参数/头中,服务器比对两者是否一致。无需服务端存储,适合分布式系统。

开发中需要注意什么?

现代框架如 Django、Spring Security 等默认提供 CSRF 防护机制,但开发者仍需注意:

  • 确保防护机制在所有敏感操作(尤其是 POST、PUT、DELETE)上启用。
  • API 接口若使用 Token 认证(如 JWT),应避免自动携带凭证(如不使用 Cookie 存储 token),并配合自定义头(如 X-CSRF-Token)来防范。
  • 静态资源页面(如管理后台)必须启用完整防护,不能因“只读”就忽略。

基本上就这些。关键在于识别哪些操作需要保护,并正确实施 token 或 SameSite 等机制。不复杂但容易忽略。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

102

2025.08.06

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

322

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

231

2023.10.07

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6415

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

404

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6076

2023.09.14

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.6万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号