---

title: CSRF防护机制详解与企业级实施指南

keywords:

  • CSRF
  • 跨站请求伪造
  • SameSite
  • CSRF Token
  • 双重提交Cookie
  • Origin校验
  • Referer校验

description: 全面阐述CSRF威胁模型与企业级防护方案,结合SameSite策略、令牌机制与来源校验,提供兼顾安全性与可用性的落地指南。

categories:

  • 文章资讯
  • 技术教程

---

CSRF防护机制详解与企业级实施指南

概述

CSRF通过诱导受害者浏览器在已登录状态下向目标站点发起恶意请求。合理组合 SameSite、令牌与来源校验,可在不同业务场景下实现防护与可用性的平衡。

防护策略矩阵

  • 基线:SameSite=Lax,对跨站必须场景评估 None+Secure
  • 高敏操作:强制CSRF Token并绑定会话与请求上下文
  • 来源校验:优先 Origin,退化使用 Referer
  • 幂等接口:避免跨站触发副作用,限制非简单请求

令牌实现

type CsrfContext = { sessionId: string; ua: string; ip: string }

function csrfTokenSign(ctx: CsrfContext, secret: string, ttlMs: number): string {
  const payload = `${ctx.sessionId}.${ctx.ua}.${ctx.ip}.${Date.now() + ttlMs}`
  const h = crypto.subtle.digestSync('SHA-256', new TextEncoder().encode(payload + secret))
  const s = Array.from(new Uint8Array(h)).map(b => b.toString(16).padStart(2, '0')).join('')
  return Buffer.from(`${payload}.${s}`).toString('base64url')
}

function csrfTokenVerify(token: string, ctx: CsrfContext, secret: string): boolean {
  const raw = Buffer.from(token, 'base64url').toString('utf8')
  const parts = raw.split('.')
  if (parts.length !== 5) return false
  const [sid, ua, ip, exp] = parts
  if (sid !== ctx.sessionId || ua !== ctx.ua || ip !== ctx.ip) return false
  if (Number(exp) < Date.now()) return false
  const expect = csrfTokenSign({ sessionId: sid, ua, ip }, secret, Number(exp) - Date.now())
  return expect === token
}

双重提交Cookie

  • 将CSRF Token同时放入Cookie与请求头/体
  • 服务器校验两者一致且与会话绑定
  • 对跨站场景配合 SameSite=None; Secure

来源校验

function checkOrigin(req: any, allowed: string[]): boolean {
  const origin = req.headers['origin'] || ''
  if (!origin) return false
  return allowed.includes(origin)
}

function checkReferer(req: any, host: string): boolean {
  const ref = req.headers['referer'] || ''
  return ref.startsWith(host)
}

运维与测试

  • 建立高敏接口清单并强制CSRF校验
  • 针对跨域业务编写白名单与例外流程
  • 在端到端测试中模拟跨站提交与Token失效

通过令牌、SameSite与来源校验的组合,可在复杂业务环境下实现稳健的CSRF防护。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部