CORS 配置能否防止 CSRF 攻击?
探讨 CORS 在跨域资源共享中的作用及其对 CSRF 攻击的防护能力。
CORS(跨域资源共享)主要用于解决浏览器的同源策略限制, 允许服务器通过响应头(如 Access-Control-Allow-Origin
)指定哪些外部源可以访问本域资源。然而, CORS 配置本身无法防止 CSRF(跨站请求伪造)攻击, 因为二者针对不同的安全风险。 明确指出:
- 目标不同
- CORS 专注于跨域资源共享的安全性, 确保服务器可以控制哪些外部源有访问资源的能力。
- CSRF 攻击则是利用浏览器自动发送的用户凭据(如 Cookie), 在用户不知情时执行恶意操作, 这类攻击并不依赖于跨域请求能否获取服务器响应.
- 防护机制独立
- 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、设置 Cookie 的
建议开发者优先使用 CSRF 特定保护措施提升安全性, 例如:
- 添加 CSRF token 验证关键 API 端点.
- Avoid misuse of CORS wildcards (
*
).