Skip to main content

CSRF

跨网站请求伪造

相关错误

“此服务器易受跨网站请求伪造攻击。在每个请求中追加 CSRF 令牌或 SameSite cookie 属性。”

问题

跨网站请求伪造 (CSRF) 是指诱使用户无意中向未经过身份验证的 web 应用发送请求。CSRF 攻击利用 Web 应用在经过身份验证的用户中的信任。

CSRF 攻击通常具有明确目标,利用社会工程手段,例如:

  • 网络钓鱼电子邮件

  • 聊天链接

  • 虚假警告

当用户登录到 Web 应用时,攻击者会提醒用户单击一个 URL,其中含有未经授权的特定 Web 应用请求。随后,用户浏览器会将此恶意请求发送到目标 Web 应用,包括会话信息,例如会话 cookie 或存储的凭证。如果用户与目标 web 应用正在进行活跃的会话,该应用会将此新请求作为授权用户发起的请求进行处理。导致攻击者可以利用 Web 应用的 CSRF 漏洞。

攻击级别取决于受攻击者拥有的权限级别。CSRF 攻击不直接窃取用户的身份信息,而是通过用户无意中执行操作进行攻击。

CSRF 攻击一旦成功,会迫使用户执行改变状态的请求,例如:

  • 更改密码

  • 更改电子邮件地址

  • 修改或删除记录

  • 转账

  • 购买

解决方案

防止 CSRF 攻击的方法:

  • 对所有改变状态的请求使用 CSRF 令牌

    CSRF 令牌也叫同步器令牌或挑战令牌,是客户端为每次用户会话生成的唯一密钥值,使攻击者无法攻击和欺骗用户。

  • 为会话 cookie 使用 SameSite cookie 属性

    在 cookie 上设置 SameSite 属性,以作为 CSRF 令牌之外的额外保护层。SameSite 属性可确保只有当 cookie 和请求来源于同一个域(而非跨域)时,才允许发送 cookie。

注意

较早版本的浏览器可能不支持 SameSite cookie。