了解跨站请求伪造攻击
跨站请求伪造(CSRF)是[继跨站脚本(XSS)]和[SQL注入(SQLi)]之后网络应用中的第三个大规模安全漏洞。
XXS是一种对有漏洞的Web应用的恶意代码注入攻击,当用户在浏览器上访问该应用时就会执行。恶意代码使网络应用程序做一些它不应该做的事情。SQLi是一个网络应用程序的漏洞,使攻击者能够干扰数据库中的SQL查询。
网络浏览器受CSRF攻击的影响最大。当给定一个文件运行时,它们无法判断它是否是恶意的。因此,网络浏览器就会继续运行这些文件。
CSRF攻击发生在一个经过验证的用户向一个网络应用程序发送恶意请求,以执行一个不需要的动作。CSRF攻击利用了脆弱的网络应用。本文将带领你了解CSRF攻击以及如何防止它们。
前提条件
在你继续之前,你需要具备以下条件。
- 对网络安全的理解。
- 对HTTP方法的理解。
CSRF攻击的概述
CSRF攻击是一个网络安全漏洞,它迫使用户在不知情的情况下,在他们当前认证的网络应用上进行恶意的操作。
在CSRF攻击中,攻击者利用用户的信任,为自己执行功能。这种类型的攻击只发生在脆弱的网络应用程序上。在社会工程平台的帮助下,攻击者可以发起CSRF攻击。
如果网站开发正确,CSRF攻击在任何时候都不应该发生。首先,应用程序必须有防伪机制。其次,加密和密码学技术确保第三方用户无法使用你的浏览器处理请求。
CSRF攻击如何工作
CSRF攻击的目标是那些无法区分有效请求和攻击者主导的伪造请求的网络应用。攻击者有多种方法来利用CSRF漏洞。
为了了解它是如何工作的,让我们看一下这个场景。
我们有一个攻击者,想利用一个有漏洞的网上银行系统。攻击者想伪造一个请求,从用户登录的网上银行账户向他的账户发送钱。
攻击者伪造了一个请求。在该请求中,另一个请求被嵌入一个超链接中。如果用户点击该链接,该请求被发送到服务器,服务器将资金从登录用户的账户转移到攻击者的账户。
从上面的图示来看,CSRF的工作原理是攻击者通过恶意链接获得对受害者浏览器的访问。为了发动这种攻击。
- 攻击者必须创建一个恶意的URL。
- 攻击者必须欺骗用户(受害者),使其点击恶意链接。
- 攻击者必须伪造请求以执行恶意活动。
- 受害者必须有一个与基于网络的银行系统的活动会话。
CSRF攻击只有在受害者在请求时登录了应用程序的情况下才有效。应用程序会检查已登录会话的cookies是否有效。如果cookie是可用的,它们将与请求一起提交。如果会话是有效的,应用程序会批准提交的cookies。因此,CSRF攻击变得成功。
这些是攻击者用来利用CSRF漏洞的方法。
GET请求
参照我们之前的例子,让我们假设网上银行账户使用HTTP GET请求方法进行交易。用户向另一个人转移资金的请求可能是这样的。
http://bankexample.com/onlinetransfer?amount=5000&account=receiver
攻击者创建一个恶意的URL,从受害者的账户中转移资金。攻击者获取原始请求,然后伪造另一个请求,并将受益人的名字替换成他们自己的名字,如下图所示。
http://bankexample.com/onlinetransfer?amount=$5000&account=attacker
然后,攻击者诱使用户点击上述恶意网址。他使用社会工程机制来强迫用户执行该URL。恶意网址被嵌入到HTML内容中并发送给用户。
<a href="http://bankexample.com/onlinetransfer?amount=$50000&account=attacker">Click here now!</a>
一旦用户点击该链接,资金就会在未经用户同意的情况下转移到攻击者的账户。然而,如果受害者有一个在线银行应用程序的活动会话,该请求将被视为合法。
POST请求
如果网上银行应用程序使用HTTP POST请求方法来转移资金,那么使用链接发送恶意请求是不可能的。
然而,恶意请求可以使用一个表单提交。另外,攻击者可以使用JavaScript来指定和启用表单,使其自动执行。
下面是该表格可能的样子。
<body onload="document.forms[0].submit()">
<form action=" http://bankexample.com/onlinetransfer" method="POST">
<input type="hidden" name="account" value="attacker"/>
<input type="hidden" name="amount" value="$50000"/>
<input type="submit" value="Click here now!"/>
</form>
</body>
CSRF攻击的影响
CSRF是一个危险的漏洞,它滥用了受害者的浏览器和网络服务器之间的信任。其影响的大小取决于分配给用户的利益数量。
例如,如果受害者是一个普通用户,攻击者可以完全控制用户的账户。然而,如果受害者有一个管理角色,攻击者可能会利用整个网络应用。
CSRF已被用于执行一些恶意活动,如窃取数据、未经授权的资金转移、更改密码、破坏客户关系、传播蠕虫或恶意软件等等。
对CSRF攻击的测试
CSRF测试是在网络应用程序中寻找CSRF漏洞。对CSRF漏洞的测试可以通过手动或使用自动工具进行。
对CSRF攻击的手动测试
如果你想找出会话是否不安全,你需要检查Web应用程序的会话。如果会话处理是在客户端,并向浏览器显示数据,那么Web应用就有漏洞。浏览器上显示的数据是HTTP认证凭证和cookies。
通过HTTP GET请求访问的资源无疑是脆弱的。即使JavaScript自动化了POST请求,它们也是暴露的和脆弱的。因此,使用POST很难解决CSRF漏洞问题。
测试人员可以使用以下方法进行测试。
- 黑盒测试。
- 灰盒测试。
[黑盒测试]是一种技术,帮助测试人员找到使应用程序和系统可从外部利用的漏洞。它在不太了解内部结构的情况下检查应用程序的功能。
[灰盒测试]是一种应用和系统检查外部和内部工作的技术。它的目的是了解和识别属于应用程序和系统的错误。
CSRF测试的工具
- [CSRF测试仪]
- [OWASP ZAP]
- [Pinata CSRF工具]
如何预防CSRF攻击
IT安全专家建议采用多种CSRF预防技术。让我们来看看预防CSRF漏洞的一些做法。
- 禁用HTTP方法。
- 确保你的电脑中的防病毒软件是最新的。
- 不要在浏览器中保存密码和登录凭证。
- 不要打开可疑的电子邮件,导航到其他网站,或在网络应用程序上验证时进行社交网络通信。
- 在一个会话结束后,立即从网络应用程序中完全注销。
- 定期进行安全测试。
- 秘密令牌验证。
- 使用referrer headers。
- 拒绝未经请求的认证请求。
总结
CSRF攻击是对网络应用的严重威胁。该漏洞取决于HTTP协议如何管理网络请求和进程。在CSRF攻击中,攻击者在用户不知情的情况下欺骗认证用户在网络应用上执行恶意操作。这对受害者或整个网络应用造成了重大影响。
总结一下,我们已经看了。
- 什么是CSRF攻击。
- CSRF攻击如何工作。
- CSRF攻击的影响。
- 测试CSRF攻击。
- 如何防止CSRF攻击。