CSRF(Cross-Site Request Forgery,跨站请求伪造)
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击手段,它利用合法用户的权限来执行非预期的操作。CSRF 攻击的核心在于攻击者诱导受害者在一个已经登录的 Web 应用上下文中发送一个请求。这个请求可能看起来像是用户自己主动发起的,但实际上是由攻击者精心设计的。
CSRF 攻击原理
- 用户登录:用户登录到一个网站(如银行网站),并在其浏览器中保存了会话 cookie。
- 诱导点击:攻击者创建一个恶意链接或 HTML 元素(如一个图像或隐藏的
<form>标签),并诱导用户点击这个链接或访问含有该元素的页面。 - 发送请求:当用户点击链接或访问页面时,恶意脚本会触发一个 HTTP 请求到用户已经登录的那个网站。由于用户的浏览器会自动包含任何相关的 cookie(包括会话 cookie),这个请求看起来就像是用户主动发起的一样。
- 执行操作:如果这个请求能够触发某个动作(比如转账、更改密码等),那么攻击就成功了。
防御措施
验证 HTTP Referer 字段:检查请求头中的
Referer字段,确认请求是否来自预期的来源。但这种方法并不是最可靠的,因为Referer可以被伪造。添加 Token 并验证:
- 请求时携带 Token:在表单或 URL 中加入一个随机生成的 token,并将其存储在用户的会话中。
- 响应时验证 Token:当服务器接收到请求时,验证请求中的 token 是否与存储在会话中的 token 匹配。
基于用户交互的防御:要求用户在执行某些关键操作前进行额外的确认步骤。
使用 SameSite Cookie 属性:设置会话 cookie 的
SameSite属性为Strict或Lax,这可以防止大多数 CSRF 攻击,因为这样浏览器就不会在第三方上下文中发送这些 cookie。双重认证:对于重要的操作,实施双因素认证或其他形式的多因素认证。
内容安全策略 (CSP):虽然 CSP 主要是针对 XSS 攻击的,但在某些情况下也可以帮助减轻 CSRF 风险。
教育用户:让用户了解潜在的威胁,并建议他们在不可信的网站上不要保持登录状态。
总结
CSRF 是一种利用用户已经建立的会话来进行恶意操作的攻击。要防御 CSRF,关键是确保只有授权的用户才能发起预期的请求,并且这些请求必须是用户明确意图的结果。通过上述提到的技术,可以有效地减少 CSRF 攻击的风险。