笔者Burpsuite Web 安全学院的学习笔记
参考资料&Google翻译
跨站点伪造请求(CSRF)
在本节中,我们将解释什么是跨站点请求伪造,描述一些常见CSRF漏洞的示例,并解释如何防止CSRF攻击。
什么是CSRF?
跨站点请求伪造(也称为CSRF)是一个Web安全漏洞,攻击者可以利用该漏洞诱使用户执行他们不打算执行的操作。它允许攻击者部分规避同一原始策略,该策略旨在防止不同的网站相互干扰。
CSRF攻击有什么影响?
在成功的CSRF攻击中,攻击者会导致受害者用户无意中执行操作。例如,这可能是更改其帐户上的Email地址,更改其密码或进行资金转帐。根据操作的性质,攻击者可能会完全控制用户的帐户。如果受感染的用户在应用程序中具有特权角色,则攻击者可能能够完全控制所有应用程序的数据和功能。
CSRF如何生效?
为了使CSRF攻击成为可能,必须具备三个关键条件:
- 一个相关的操作。攻击者有理由诱使应用程序中发生某种操作。这可能是特权操作(例如,修改其他用户的权限)或对用户特定数据的任何操作(例如,更改用户自己的密码)。
- 基于Cookie的会话处理。执行该操作涉及发出一个或多个HTTP请求,并且该应用程序仅依靠会话cookie来标识发出请求的用户。没有其他机制可以跟踪会话或验证用户请求。
- 没有不可预测的请求参数。执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当使用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不会受到影响。
例如,假设一个应用程序包含一个功能,该功能使用户可以更改其帐号的邮件地址。用户执行此操作时,将发出如下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所需的条件:
攻击者会对更改用户帐户上的Email地址的操作感兴趣。执行此操作后,攻击者通常将能够触发密码重置并完全控制用户的帐户。
该应用程序使用会话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>
</