LOG // 049 · 安全

CSRF攻击

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种Web安全漏洞,攻击者诱骗已认证的用户在不知情的情况下执行非预期的操作。这种攻击利用了Web应用对用户浏览器的信任机制。

01CSRF攻击的特点:

  • - 攻击者诱导用户访问恶意网站或点击恶意链接
  • - 用户在已登录目标网站的情况下发起非预期请求
  • - 请求看起来像是用户自愿发起的
  • - 攻击通常针对状态变更操作(如转账、改密码、发消息等)

02CSRF攻击原理

  1. 用户登录可信网站A,获得认证Cookie
  2. 用户在不登出网站A的情况下访问恶意网站B
  3. 网站B包含一个自动向网站A发起请求的代码
  4. 由于用户的浏览器会自动携带网站A的Cookie,请求被当作合法请求执行
Tip

HTTPS 本身无法阻止 CSRF

03防护方式

  • 同步器令牌模式(Synchronizer Token Pattern)

1.服务端在渲染包含敏感操作的表单页面时,生成一个与当前用户会话绑定的随机、不可预测的令牌,并将其作为隐藏字段嵌入表单(或通过响应头下发)。

2.当表单提交时,服务端校验请求中的令牌是否与会话中存储的令牌一致。

3.攻击者因同源策略限制,无法读取目标站点页面中的令牌值,因此无法构造出通过校验的请求。

  • 设置SameSite Cookie属性

通过Cookie的SameSite属性限制第三方使用Cookie:

- Strict:完全禁止第三方使用Cookie

- Lax:宽松模式,允许部分安全请求携带Cookie

  • 关键操作二次验证

对于极高风险的操作(如大额转账、修改密码、删除账户),可在提交前要求用户重新输入密码或完成 CAPTCHA 验证。

  • 避免在 GET 请求中改变状态

遵循 HTTP 语义规范,GET 请求应仅用于读取数据,所有状态变更操作均通过 POST、PUT、PATCH 或 DELETE 完成。这可以消除通过 <img> 标签等简单方式触发 CSRF 的风险,迫使攻击者必须使用更复杂的表单或 AJAX 方式,从而提高攻击门槛。

总结

结论先行CSRF 的本质是利用浏览器对身份凭证的自动携带机制,将攻击者的指令伪装成用户的合法操作。防御的关键不在于隐藏接口或加密传输,而在于让服务端能够区分“用户主动发起的请求”与“第三方页面诱导的请求”。同步器令牌模式通过引入攻击者无法读取的随机值,从根本上解决了这一鉴别问题,应作为核心防御手段。SameSite Cookie 和二次验证可作为有效的纵深补充,但不应单独依赖。开发者在设计接口时,同时应遵循“GET 不改变状态”的原则,从源头上减少可被简单利用的攻击面。