什么是CSRF 攻击

165 阅读3分钟

以下是关于 CSRF(Cross-Site Request Forgery,跨站请求伪造) 的一些常见面试题,适用于前端和后端开发工程师、安全工程师等职位:


💡 基础题

1. 什么是 CSRF?

回答要点:

  • 是一种攻击方式,攻击者诱导用户在已登录某网站的情况下,向该网站发送非本意的请求。
  • 例如:用户登录了银行网站后,访问攻击者页面,攻击者构造一个表单发起转账请求,银行网站会误认为是用户发起的操作。

2. CSRF 和 XSS 的区别是什么?

项目CSRFXSS
攻击目标用户的操作行为用户浏览器执行恶意脚本
原理利用用户已登录状态发送伪造请求注入并执行脚本
依赖条件必须依赖登录状态(Cookie)可独立执行,不一定需要登录
防护方式Token、SameSite Cookie输入校验、CSP、转义

3. CSRF 常见的攻击方式有哪些?

回答要点:

  • GET 请求攻击:诱导点击链接、嵌入图片 <img src="http://example.com/transfer?amount=1000">
  • POST 表单提交:自动构造表单并提交
  • Ajax 请求(如果目标网站没有做 CSRF 防护)

🔐 安全防护相关

4. 如何防御 CSRF 攻击?

回答要点:

  1. CSRF Token(最常用方式)

    • 每次请求带上一个由后端生成的 token
    • 后端验证 token 是否正确
  2. SameSite Cookie

    • 设置 Cookie 的 SameSite=StrictLax
    • 防止第三方站点携带 Cookie 发起请求
  3. Referer 检查

    • 检查请求头的 Referer 是否来自合法来源
    • 缺点是容易被代理或某些浏览器拦截
  4. 双重验证机制(如图形验证码或短信)


5. CSRF Token 是如何工作的?

回答要点:

  • 后端为每个用户生成唯一 Token(通常保存在 Session 中)

  • 前端发送请求时将 Token 加入请求(通常通过请求头或隐藏字段)

  • 后端验证:

    • Token 是否存在
    • Token 是否匹配当前用户的 session
    • Token 是否过期

🧪 实战&扩展

6. CSRF Token 如何防止被攻击者窃取?

回答要点:

  • 不通过 URL 传输,防止泄漏(如 Referer 泄露)
  • 使用 HttpOnly Cookie 存储敏感信息(虽然 token 本身不适合放入 HttpOnly)

7. 在前后端分离项目中,如何防御 CSRF?

回答要点:

  • 使用 SameSite Cookie 配合 Token 防御
  • 将 CSRF Token 存在 HTTP 头中发送(如 X-CSRF-TOKEN
  • 如果是跨域请求,建议使用 JWT 或 OAuth 结合验证码等手段增强安全性

8. 设置 Cookie 的 SameSite 有哪些模式?它们各自代表什么含义?

SameSite 值说明
Strict严格模式,只有从同一站点导航时才会携带 Cookie
Lax放宽限制,如 GET 请求的链接点击、预加载可以携带 Cookie
None完全开放,允许跨站携带,但必须配合 Secure(HTTPS)使用

9. 举一个简单的 CSRF 攻击实例?

<!-- 攻击者页面中的代码 -->
<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="to" value="attacker_account">
  <input type="hidden" name="amount" value="10000">
  <input type="submit" value="点击领取奖品!">
</form>

用户点击后,如果登录了银行账户,则钱被转走。