CORS 配置能否防止 CSRF 攻击?

探讨 CORS 在跨域资源共享中的作用及其对 CSRF 攻击的防护能力。

前端安全 中等 CSRF 安全 跨域

CORS(跨域资源共享)主要用于解决浏览器的同源策略限制, 允许服务器通过响应头(如 Access-Control-Allow-Origin)指定哪些外部源可以访问本域资源。然而, CORS 配置本身无法防止 CSRF(跨站请求伪造)攻击, 因为二者针对不同的安全风险。 明确指出:

  1. 目标不同
    • CORS 专注于跨域资源共享的安全性, 确保服务器可以控制哪些外部源有访问资源的能力。
    • CSRF 攻击则是利用浏览器自动发送的用户凭据(如 Cookie), 在用户不知情时执行恶意操作, 这类攻击并不依赖于跨域请求能否获取服务器响应.
  2. 防护机制独立
    • CSRF 防御依赖于专门的防护策略, 如服务器端生成和验证 CSRF token、设置 Cookie 的 SameSite 属性或采用双重提交凭证的方式。CORS 配置并不能为此提供保障.
    • 例如在实际案例中:
      // HTTP头部中的CSRF设置示例(服务器端)
      Set-Cookie: sessionID=abc123; SameSite=Lax; Secure
      
      • SameSite=Lax 能阻止跨站提交的 GET 以外请求, 但并不保证所有场景的安全.
    • CORS 在 CSRF 攻击下可能失效: 即使服务器拒绝了跨域请求响应, CSRF 攻击仍可利用用户当前会话发送非 JS 请求.

建议开发者优先使用 CSRF 特定保护措施提升安全性, 例如:

  • 添加 CSRF token 验证关键 API 端点.
  • Avoid misuse of CORS wildcards (*).