0Pricing
Cyber Security Academy · 课时

跨站请求伪造(CSRF)

学习 CSRF 攻击如何伪造经过身份验证的请求,以及 CSRF 令牌和 SameSite Cookie 如何防御这类攻击

跨站请求伪造(CSRF) 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

什么是 CSRF?

跨站请求伪造(CSRF)会诱骗已通过身份验证的用户浏览器向 Web 应用发出未经授权的请求。浏览器会自动随请求发送 Cookie,因此如果没有额外措施,服务器无法区分合法请求和伪造请求。

CSRF 的工作原理

场景:

  1. 受害者已登录 bank.com(浏览器中存在会话 Cookie)
  2. 受害者访问攻击者的页面,其中包含:<img src="https://bank.com/transfer?to=attacker&amount=1000">
  3. 浏览器会附带 bank.com 的 Cookie 发送 GET 请求
  4. 银行处理这笔转账

使用 POST 请求的 CSRF

POST CSRF 需要使用表单:

<form action="https://bank.com/transfer" method="POST" id="f">
  <input name="to" value="attacker">
  <input name="amount" value="1000">
</form>
<script>document.getElementById("f").submit()</script>

CSRF 令牌

主要防御措施是使用 CSRF 令牌:将随机、保密、每个会话(或每个请求)独有的值嵌入表单中。服务器会在每个改变状态的请求中验证令牌。其他域上的攻击者无法读取令牌(同源策略)。

SameSite Cookie 属性

SameSite=Strict:Cookie 根本不会随跨站请求发送。SameSite=Lax:Cookie 会随安全的顶级导航(链接)发送,但不会随来自其他网站的 POST 请求发送。现代浏览器默认使用 Lax,从而显著降低了 CSRF 风险。

双重提交 Cookie 模式

这是服务器端存储令牌的一种替代方案:设置一个随机的 CSRF Cookie,并要求在请求参数中再次提交它。攻击者无法读取该 Cookie(同源限制),因此无法在表单数据中提交与其匹配的值。

自定义请求标头

对于 AJAX 请求,要求使用自定义标头(例如 X-Requested-With: XMLHttpRequest)可以提供 CSRF 防护,因为浏览器会阻止跨源脚本设置任意标头(CORS 会强制执行这一点)。

CSRF 令牌何时还不够

在以下情况下,CSRF 令牌会失效:

  • 存在 XSS——攻击者可以通过 JavaScript 读取令牌
  • 令牌泄露在网址中(Referer 标头)
  • 令牌可预测或被重复使用
  • CORS 配置错误,允许攻击者的源

CSRF 测试

测试步骤:

  1. 识别会改变状态的请求(POST、PUT、DELETE)
  2. 删除或修改 CSRF 令牌,然后重新提交
  3. 构造跨源表单提交,并检查是否成功
  4. 验证会话 Cookie 上的 SameSite 属性

接口中的 CSRF

使用 JSON 的 REST 接口在满足以下条件时通常可以免受 CSRF 影响:

  • 要求使用 Content-Type: application/json(HTML 表单无法设置此值)
  • 使用基于令牌的身份验证(Authorization 标头,而不是 Cookie)

但是,接受 Cookie 的接口仍然必须实施 CSRF 防护。

现代 CSRF 形势

由于 Chrome、Firefox 和 Safari 默认使用 SameSite=Lax,许多传统的 CSRF 攻击都会被阻止。不过,子域攻击和某些导航模式仍可能绕过 Lax。请将 SameSite 与 CSRF 令牌结合使用,以实现稳健的防护。

快速检查:CSRF

Web 应用防御 CSRF 攻击的主要措施是什么?

课程回顾

CSRF 利用浏览器自动为请求附加 Cookie 的行为,从恶意网站伪造经过身份验证的请求。主要防御措施:在服务器端验证 CSRF 令牌。次要措施:SameSite=Strict/Lax Cookie 属性。在标头中使用令牌身份验证而不是 Cookie 的接口天然能够抵抗 CSRF。应结合多种防御措施;如果存在 XSS,攻击者可以绕过 CSRF 令牌。

常见问题解答

「跨站请求伪造(CSRF)」课时是免费的吗?

是的 — 「跨站请求伪造(CSRF)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「跨站请求伪造(CSRF)」这节课中我会学到什么?

学习 CSRF 攻击如何伪造经过身份验证的请求,以及 CSRF 令牌和 SameSite Cookie 如何防御这类攻击 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「跨站请求伪造(CSRF)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. SQL 注入:原理与成因
  2. 跨站脚本攻击(XSS)
  3. 跨站请求伪造(CSRF)
  4. 安全配置错误与暴露的服务
← 返回 Cyber Security Academy