标题 : 跨站请求伪造 (CSRF) 攻击
日期 : 2023-08-01
什么是 CSRF
跨站点请求伪造 (CSRF),也称为 XSRF、Sea Surf 或会话骑乘,是一种攻击媒介,可诱骗 Web 浏览器在用户登录的应用程序中执行不需要的操作。
成功的 CSRF 攻击对于企业和用户来说都是毁灭性的。它可能会导致客户关系受损、未经授权的资金转移、密码更改和数据被盗(包括会话 cookie 被盗)。
CSRF 通常使用恶意社会工程进行,例如诱骗受害者向服务器发送伪造请求的电子邮件或链接。由于毫无戒心的用户在攻击时已通过其应用程序进行身份验证,因此无法区分合法请求和伪造请求。
跨站请求伪造示例
在执行攻击之前,犯罪者通常会研究应用程序,以使伪造的请求看起来尽可能合法。
例如,100 美元银行转账的典型 GET 请求可能如下所示:
获取 http://netbank.com/transfer.do?acct=PersonB&amount=$100 HTTP/1.1
黑客可以修改此脚本,从而将 100 美元转入他们自己的帐户。现在恶意请求可能如下所示:
获取 http://netbank.com/transfer.do?acct=AttackerA&amount=$100 HTTP/1.1
不良行为者可以将请求嵌入到看似无辜的超链接中:
<a href="http://netbank.com/transfer.do?acct=AttackerA&amount=$100">了解更多!</a>
接下来,他可以通过电子邮件将超链接分发给大量银行客户。登录银行账户后点击链接的用户将无意中发起 100 美元转账。
请注意,如果银行网站仅使用 POST 请求,则不可能使用 <a> href 标记构建恶意请求。然而,攻击可以通过自动执行嵌入式 JavaScript 的 <form> 标签进行。
这种形式可能是这样的:
<body onload="document.forms[0].submit()">
<form action="http://netbank.com/transfer.do" method="POST">
<input type="hidden" name="acct" value="AttackerA"/>
<input type="hidden" name="amount" value="$100"/>
<input type="提交" value="查看我的图片!"/>
</形式>
</正文>
CSRF缓解方法
有许多有效的方法可以预防和缓解 CSRF 攻击。从用户的角度来看,预防就是保护登录凭据并拒绝未经授权的行为者访问应用程序。
最佳实践包括:
- 不使用时注销网络应用程序
- 保护用户名和密码
- 不允许浏览器记住密码
- 避免在登录应用程序时同时浏览
对于 Web 应用程序,存在多种解决方案来阻止恶意流量并防止攻击。最常见的缓解方法之一是为每个会话请求或 ID 生成唯一的随机令牌。这些随后由服务器检查和验证。具有重复令牌或缺失值的会话请求将被阻止。或者,与会话 ID 令牌不匹配的请求将被阻止到达应用程序。
双重提交cookie是另一种众所周知的阻止CSRF的方法。与使用唯一令牌类似,随机令牌被分配给 cookie 和请求参数。然后,服务器在授予应用程序访问权限之前验证令牌是否匹配。
虽然有效,但如果受保护的站点链接到外部 URL,令牌可能会在多个点暴露,包括浏览器历史记录、HTTP 日志文件、记录 HTTP 请求第一行的网络设备和引用标头。这些潜在的弱点使得代币成为一个不够完善的解决方案。
使用自定义规则防止CSRF攻击
CSRF 攻击的高度个性化特性阻碍了通用解决方案的开发。但是,可以采用自定义安全策略来防范可能的 CSRF 场景。
IncapRules是 LvBug 云专有的自定义规则引擎,允许客户创建自己的安全策略。这些策略是使用直观的语法生成的,并且可以即时修改,从而增强了我们默认的 Web 应用程序防火墙 配置。
使用 IncapRules,您可以创建一个策略,根据 HTTP 引荐来源网址标头内容过滤对敏感页面和功能的请求。这样做允许从安全域的简短列表中执行请求。
这种方法完全对抗CSRF 攻击的社会工程方面。它可以防止在安全范围之外执行恶意请求,无论内容如何。
或者,您可以在“仅警报”模式下运行规则来跟踪可能的利用尝试,或提供验证码来警告粗心的用户。
|