什么是跨站请求伪造 (CSRF)?
跨站请求伪造
跨站请求伪造 (CSRF) 是一种互联网漏洞,它涉及受信任网站用户发出未经授权的命令。与利用用户对网站信任的跨站脚本不同,CSRF 利用网站对特定用户浏览器的信任。会话劫持或一键式攻击也是指同一件事。
浏览器的“GET”命令通常用作 CSRF 中的漏洞点。为了将命令注入特定网站,CSRF 使用诸如“IMG”之类的 HTML 标签。然后,网站的特定用户同时作为主机和无意的帮凶参与其中。由于合法用户发送了命令,网站通常不知道自己正在遭受攻击。攻击者可能会请求将资金转移到另一个帐户,提取更多资金,或将资金发送到另一个帐户(对于 PayPal 和类似网站而言)。
它是如何执行的?
CSRF 攻击很难执行,因为它需要许多因素才能成功:
攻击者必须在攻击不检查引用标头(标准)的网站或具有浏览器或插件故障(罕见)允许伪造引用的用户/受害者之间进行选择。
攻击者必须在目标网站上找到能够更改受害者电子邮件地址、更改登录凭据或转移资金的表单提交。
攻击者必须找出表单或 URL 上所有输入的正确值。如果其中任何一个需要是攻击者无法准确猜测的秘密值或 ID,则攻击将失败。
在受害者登录到目标站点时,攻击者必须吸引用户/受害者访问包含恶意代码的网页。
假设甲同时浏览他的银行帐户并在聊天室聊天。攻击者(乙)在聊天频道中发现甲也登录到bank.com。乙诱使甲点击指向幽默图片的链接。“IMG”标签提供 bank.com 表单输入的数据,这将把钱从甲的帐户转移到乙的帐户。如果 bank.com 在转移资金之前没有对甲进行二次身份验证,则攻击将成功。
预防跨站请求伪造
用户端:从用户体验的角度来看,用户端预防是无效的;预防可以通过简单地一次只打开一个标签页并且不使用“记住我”功能来实现。
服务器端:使用 CSRF 令牌是在服务器端实现 CSRF 保护最常用的方法之一。CSRF 令牌与用户的会话相关联,但不会自动提交。只有在网站收到有效的 CSRF 令牌以及 Cookie 时,网站才会继续执行;攻击者无法代表用户执行操作,因为攻击者无法知道用户的唯一令牌。