CSRF攻击详解 - 常见的Web攻击方法
目录
CSRF攻击简介
什么是CSRF攻击?
CSRF攻击原理
CSRF攻击可以做什么?
CSRF攻击实操
CSRF攻击防御方法
CSRF攻击简介
1、什么是CSRF攻击?
2、CSRF攻击原理
用户C打开浏览器,访问受信任网站A,输入用户名和密码登录网站A
网站A验证用户信息通过后,网站A产生Cookie信息并返回给浏览器,此时用户C登录网站A成功,可以正常发送请求到网站A
用户未退出网站A之前,在同一浏览器中,打开一个新的页面访问网站B
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方网站A
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息来验证用户C的权限,因为此次请求中的Cookie信息对于网站A来说是已经授权成功的,所以网站A处理该请求,导致来自网站B的恶意代码被成功执行
3、CSRF攻击可以做什么?
如果在网站A中的接口使用的是GET请求,那么我们可以直接在网站B的页面中植入如下恶意代码,即可在网站B中来请求网站A中任意的API接口。
<img src="http://www.website-a.com/userInfo.php?id=1" />
如果在网站A中的接口使用的是POST请求,那么我们可以直接在网站B的页面中植入如下恶意代码,即可在网站B中来请求网站A中任意的API接口。
<html>
<head>
</head>
<body onload="start_attack()">
<iframe name="start_attack" display="none">
<form method="POST" name="attack_form" action="http://www.website-a.com/userInfo.php">
<input type="hidden" name="id" value="1">
<input type="hidden" name="name" value="wang">
</form>
</iframe>
</body>
<script type="text/javascript">
function start_attack(){
iframe = document.frames["start_attack"];
iframe.document.Submit("attack_form");
}
</script>
</html>
1、Cookie Hashing:所有表单页面中都包含同一个伪随机值,以认证这确实是用户发送的请求。
2、验证码:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,以保证数据请求来自于网站自身。
3、One-Time Tokens:所有表单页面中都包含一个不同的伪随机值,以认证这确实是用户发送的请求。
然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于Ajax方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。