跨站点请求伪造攻击是一种混淆的代理*网络攻击,它诱使用户意外地使用其凭据来发起状态更改活动,例如从其帐户中转帐资金,更改其电子邮件地址和密码或其他一些不希望的行为行动。
虽然对普通用户的潜在影响是巨大的,但对管理帐户的成功CSRF攻击会损害整个服务器,从而有可能导致Web应用程序,API或其他服务的完全接管。
跨站点请求伪造如何工作?这种攻击着眼于以状态更改请求为目标,状态更改请求是指导致数据从一个值更改为另一个值的请求类型。例如,定向请求可能会进行购买或更改帐户中的值。有趣的是,这是“盲目攻击”,不会将数据返回给攻击者,这使其成为数据盗窃的不佳选择。
这是跨站点请求伪造攻击的4个步骤的示例:
攻击者创建了一个伪造的请求,该请求在运行时会将特定银行的10,000美元转入攻击者的帐户。 攻击者将伪造的请求嵌入到超链接中,然后以批量电子邮件形式发送出去,也将其嵌入到网站中。 受害人单击攻击者放置的电子邮件或网站链接,导致受害人向银行提出要求转帐10,000美元的请求。 银行服务器收到请求,并且由于受害者得到了适当的授权,因此将请求视为合法并转移了资金。 CSRF攻击的方法不同,但通常具有以下特征:
他们利用依赖用户身份的网站 他们欺骗用户的浏览器向目标站点发送HTTP请求 它们涉及使用具有副作用并且没有适当的CSRF保护的HTTP请求不同的HTTP动词对CSRF攻击具有不同的脆弱性,从而导致保护策略的变化。这是由于Web浏览器对动词的处理方式不同。
HTTP GET请求具有嵌入式参数,例如图像标记内的参数,可以对其进行操纵和利用。通常,GET请求不会修改状态,因此对于正确实现的Web应用程序或其他资源,它们对于CSRF的目标无效。
HTTP POST用于更改状态,导致对保护的需求增加。为此,Web浏览器实现了称为相同源策略(SOP)和包含跨源安全策略的跨源资源共享(CORS)的安全措施。SOP仅允许来自相同来源的请求,而CORS仅允许某些类型的请求来自不同的来源。这些实现的组合通过限制请求或网页与其他来源进行交互的能力,有助于防止CSRF攻击(以及其他)。
其他HTTP动词(例如PUT和DELETE)只能使用SOP和CORS来运行,从而减轻了许多跨站点攻击。
尽管不常见,但某些网站会明确禁用这些安全措施,并且有可能在网络浏览器中也禁用它们。
如何减轻跨站请求伪造?缓解CSRF攻击的最常见方法是使用两种方法之一使用Anti-CSRF令牌。尽管令牌的实现略有不同,但基本原理仍然相同。通过创建然后比较随机生成的令牌字符串,攻击者不太可能进行攻击而不会产生非常不可能的猜测。
同步器令牌模式:当用户访问网页(例如允许转账的银行网页)时,银行的网站会将随机令牌嵌入表格中。当用户提交表单时,将返回随机令牌,银行可以检查两个令牌是否匹配。如果令牌匹配,则进行转移。攻击者无法访问在网页中创建的随机令牌值,并且如果他们请求该页面,则相同的原始策略将阻止攻击者读取响应。
减轻此方法的缺点是,这增加了服务器端检查每个请求的令牌有效性的负担。如果用户有多个浏览器窗口或涉及不同软件发出请求的其他条件,它也会造成问题。通过将令牌的范围扩展到每个会话而不是每个请求,可以避免某些困难。
Cookie到标题令牌:另一种方法涉及向访问者的Web浏览器发布一个包含随机令牌的cookie。在客户端运行的java script将读取cookie中令牌的值,并将其复制到HTTP标头中,该标头将随每个请求一起发送。如果用户发送了真实请求,则服务器可以验证标头中的值。其他任何实例都将失败,从而减轻了成功的攻击。
通过WAF使用自定义规则,用户可以帮助防止某些CSRF攻击。探索Cloudflare的Web应用程序防火墙。
*代理问题困惑混乱的代理人是指被滥用滥用权限的计算机程序。与此类漏洞相关的风险就是为什么基于功能的安全性有助于减少与滥用相关的风险。例如,在安装软件时,当今大多数计算机都要求用户登录。这有助于防止在用户意外使用其权限来授权安装时无意中执行代码。