(三)跨站点伪造请求(CSRF)

什么是CSRF?

跨站点请求伪造(也称为CSRF)是一个Web安全漏洞,攻击者可以利用该漏洞诱使用户执行他们不打算执行的操作。它允许攻击者部分规避同一原始策略,该策略旨在防止不同的网站相互干扰。
在这里插入图片描述
在成功的CSRF攻击中,攻击者会导致受害者用户无意中执行操作。例如,这可能是更改其帐户上的电子邮件地址,更改其密码或进行资金转帐。根据操作的性质,攻击者可能能够完全控制用户的帐户。如果受感染的用户在应用程序中具有特权角色,则攻击者可能能够完全控制所有应用程序的数据和功能。

CSRF攻击条件

  1. 相关动作。攻击者有理由诱使应用程序中发生某种动作。这可能是特权操作(例如,修改其他用户的权限)或对用户特定数据的任何操作(例如,更改用户自己的密码)。

  2. 基于Cookie的会话处理。执行该操作涉及发出一个或多个HTTP请求,并且该应用程序仅依靠会话cookie来标识发出请求的用户。没有其他机制可以跟踪会话或验证用户请求。

  3. 没有不可预测的请求参数。执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当使用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不会受到攻击。

例如,假设一个应用程序包含一个功能,该功能使用户可以更改其帐户上的电子邮件地址。用户执行此操作时,他们将发出如下HTTP请求:

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE

email=wiener@normal-user.com

这符合CSRF的形成条件:

  • 攻击者会对更改用户帐户上的电子邮件地址的操作感兴趣。执行此操作后,攻击者通常将能够触发密码重置并完全控制用户的帐户。

  • 该应用程序使用会话cookie来标识哪个用户发出了请求。

  • 没有其他令牌或机制来跟踪用户会话。 攻击者可以轻松确定执行操作所需的请求参数的值。

在满足这些条件的情况下,攻击者可以构建包含以下HTML的网页:

<html>
  <body>
    <form action="https://vulnerable-website.com/email/change" method="POST">
      <input type="hidden" name="email" value="pwned@evil-user.net" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

如果受害用户访问攻击者的网页,则会发生以下情况:

  • 攻击者的页面将触发对易受攻击的网站的HTTP请求。

  • 如果用户登录到易受攻击的网站,则其浏览器将自动在请求中包括其会话cookie(假设未使用SameSite cookie)。

  • 易受攻击的网站将以正常方式处理请求,将其视为由受害者用户发出,并更改其电子邮件地址。

注:尽管通常相对于基于cookie的会话处理来描述CSRF,但它也出现在应用程序自动向请求添加一些用户凭据的其他情况下,例如HTTP Basic身份验证和基于证书的身份验证。

CSRF防御

CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。

  • 检测HTTPreferer字段同域。根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站

比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。

  • 限制session-cookie的生命周期

CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时要及时清除认证cookie。

  • 使用验证码

虽然攻击者已经通过获取cookie得到用户的身份,但是通过在你的表单中包括验证码,事实上网站已经消除了跨站请求伪造攻击的风险。可以在任何需要执行操作的任何表单中使用这个流程。

  • cookie关键字段设置Http-Only属性

可以在一定程度防御CSRF,也能一定程度上防止js脚本攻击。

  • 对敏感的请求增加安全的token,可以通过自定义http首部字段实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值