跨站点请求伪造(CSRF / XSRF),有时也称为 海上冲浪 or 骑马,是指使用Cookie对经过身份验证的Web应用程序的攻击。攻击者可以诱骗受害者发出受害者不打算提出的请求。因此,攻击者滥用了Web应用程序对受害者浏览器的信任。尽管跨站点请求伪造(CSRF)攻击无法为攻击者提供从服务器返回的响应,但聪明的攻击者可能会造成相当多的损害,尤其是与针对管理用户的精心设计的社交工程攻击配合使用时。

跨站点请求伪造(CSRF)是一种 困惑的副手 攻击,在将伪造的请求发送到Web服务器时利用受害者的身份验证和授权。因此,影响高特权用户(例如管理员)的CSRF漏洞可能会导致应用程序全面受损。在一次成功的CSRF攻击过程中,受害人的Web浏览器被恶意网站欺骗,采取了有害的行动-攻击者将HTTP请求发送到Web应用程序。通常,此类请求将涉及提交Web应用程序上存在的表单以更改某些数据。

发送HTTP请求(合法或其他请求)后,受害者的浏览器将包含cookie标头。 Cookies通常用于存储用户的会话标识符,以便用户不必为每个请求输入其登录凭据,这显然是不切实际的。如果受害者的身份验证会话存储在仍然有效的会话Cookie中(不一定需要打开浏览器窗口/选项卡),并且如果应用程序容易受到跨站点请求伪造(CSRF)的攻击,则攻击者可以利用CSRF对网站发起任何所需的恶意请求,并且服务器端代码无法区分这些请求是否为合法请求。

例如,CSRF攻击可用于通过迫使受害者进行涉及其银行帐户的操作来破坏在线银行业务。 CSRF还可以促进 跨站点脚本(XSS)。因此,即使CSRF当前未包含在CSRF中,也应将其视为一个严重的Web应用程序安全问题。 OWASP前十名.

GET请求中的跨站点请求伪造

以下是一个简单的示例,说明了如何跨站点请求伪造(CSRF) GET 通过使用请求 <img> tag.

<img src="//example.com/changePassword.php/?newPassword=attackerPassword">

上面是使用HTTP GET请求的CSRF攻击。如果受害者使用以下负载访问由攻击者控制的网页,则浏览器会将包含cookie的请求发送到攻击者制作的URL。

POST请求中的跨站点请求伪造

GET 但是,请求并不是攻击者可以滥用的唯一HTTP方法。 POST 请求同样容易受到跨站点请求伪造(CSRF)的攻击,但是,攻击者将需要使用一些JavaScript来提交请求。 POST request.

以下是如何使用CSRF滥用CSRF的简单示例 POST 通过使用请求 <iframe> 标签。此代码将被加载到一个iframe中,该iframe对受害者不可见。

iframe定义

<iframe src="//attacker.com/csrfAttack" style="width:0;height:0;border:0;border:none;"></iframe>

iframe HTML内容

<body onload="document.getElementById('csrf').submit()">
  <form id="csrf" action="http://example.com/changePassword.php" method="POST">
    <input name="newPassword" value="attackerPassword" />
  </form>
</body>

CSRF保护

防止跨站点请求伪造(CSRF)的主要方法有两种:将Cookie与已提供给浏览器的反CSRF令牌进行同步,或者首先防止浏览器向网络应用程序发送Cookie。

反CSRF令牌

跨站点请求伪造(CSRF)攻击的推荐和使用最广泛的预防技术被称为 反CSRF令牌,有时也称为 同步令牌 or just simply a CSRF令牌。当用户提交表单或提出其他需要Cookie的经过身份验证的请求时,该请求中应包含一个随机令牌。然后,Web应用程序将在处理请求之前验证此令牌的存在和正确性。如果令牌丢失或不正确,则可以拒绝该请求。

强烈建议您使用现有的,经过测试且可靠的抗CSRF库。根据您的语言和选择的框架,有几个可以立即使用的高质量开源库。设计良好的反CSRF系统的特征涉及以下属性:

  • 每个用户会话的反CSRF令牌都应该是唯一的
  • 会话应在适当的时间后自动过期
  • 反CSRF令牌应为有效长度的密码随机值
  • 反CSRF令牌应是加密安全的,即由强大的伪随机数生成器(PRNG)算法生成
  • 可以将反CSRF令牌添加为表单或URL的隐藏字段(仅在GET请求导致状态更改(即GET请求不是幂等)时才需要)
  • 如果反CSRF令牌验证失败,则服务器应拒绝请求的操作

SameSite饼干

The SameSite cookie attribute is a new attribute that can be set on cookies to instruct the browser to disable third-party usage for specific cookies. The SameSite attribute is set by the server when setting the cookie and requests the browser to only send the cookie in a first-party context. Therefore, the request has to originate from the same origin – requests made by third-party sites will not include the SameSite cookie. This effectively eliminates Cross-site Request Forgery attacks without the use of synchronizer tokens. Unfortunately, this method of CSRF protection is not yet effective in all web browsers but .

资源: //www.acunetix.com/blog