前端/移动开发面试题更新 2026-08-05

在 Express 框架中,你会采取哪些措施来防御 CSRF 攻击?

前端/移动开发安全意识技术原理方案权衡ExpressNode.js

考察说明

考查对 Express 应用中 CSRF 攻击原理及常见防护方案的理解与落地能力。

回答思路

  1. 【回答框架 1】CSRF 攻击利用浏览器自动携带 Cookie 的特性,诱导用户在已登录状态下向目标站点发送伪造请求。防护核心是确保请求来源可信且携带攻击者无法预知的令牌。
  2. 【回答框架 2】常用方案一:同步令牌模式。服务端生成随机 token 存入 session,渲染表单或接口时下发,客户端提交时携带,服务端比对一致才放行。Express 中可结合 csurf 中间件实现,但需注意该中间件已停止维护。
  3. 【回答框架 3】常用方案二:双重提交 Cookie。服务端将 token 写入 cookie,同时要求请求头或表单字段携带相同 token,服务端校验两者一致即可。此方案无需存储 session,适合分布式环境,但依赖 Cookie 的 SameSite 属性增强安全性。
  4. 【回答框架 4】补充措施:设置 SameSite=Lax 或 Strict 限制跨站携带 Cookie;校验 Origin 或 Referer 头;对敏感操作要求自定义请求头或二次验证。
  5. 【回答框架 5】无状态 API 场景优先采用双重提交 Cookie 或 JWT 携带 CSR F token,避免 session 存储带来的扩展性问题。
  6. 【关键点 1】CSRF 防护本质是校验请求来源与携带的不可预测令牌。
  7. 【关键点 2】同步令牌模式需要服务端存储,双重提交 Cookie 无需存储。
  8. 【关键点 3】SameSite 属性可减少大多数 CSRF 攻击,但不能完全替代 token 机制。
  9. 【关键点 4】Express 中推荐使用 csurf 或自行实现双重提交 Cookie 逻辑。
  10. 【关键点 5】敏感操作应同时考虑 CSRF 与点击劫持等风险。
  11. 【易错点 1】不要仅依赖 Cookie 一致性无 token 校验,否则可能被挟持子域或 XSS 绕过。
  12. 【易错点 2】对外提供 REST API 时,若仅设置 CORS 不处理 CSRF,可能仍存在风险。
  13. 【易错点 3】使用 csurf 中间件需注意其兼容性与维护状态,避免引入已废弃依赖。