CSRF跨站请求伪造
CSRF跨站请求伪造
一、CSRF攻击原理概要
CSRF(Cross-Site Request Forgery)是指跨站请求伪造,通常缩写为CSRF或者是XSRF
也可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义进行某些非法操作。CSRF能够使用你的账户发送邮件,获取你的敏感信息,甚至盗走你的财产等
CSRF 与XSS 最大的区别就在于,CSRF并没有盗取cookie而是直接利用
1.CSRF攻击步骤
①目标用户登录受信任网站A,并在本地生成Cookie
②目标用户在不登出A的情况下,访问恶意网站B,或者恶意链接URL,其目的就是想让目标用户在他自己的电脑上执行恶意代码
2.CSRF与XSS的区别
XSS:攻击者发现XSS漏洞——构造(获取cookie的)代码——发送给受害人——受害人打开——攻击
者获取受害人的cookie——黑客使用cookie伪造身份进行攻击——完成攻击
攻击者需要登录后台完成攻击
CSRF:攻击者发现CSRF漏洞——构造(发起攻击的)代码——发送给受害人——受害人打开——受
害人执行代码——完成攻击
攻击是管理员(目标用户或受害者)自己实现的,攻击者只负责了构造代码
CSRF少了获取cookie的步骤,为什么会少了呢。因为受害人在执行恶意代码的
时候就已经完成了攻击,而攻击者并没有参与进来
所以,XSS更像是偷钥匙,而CSRF则是趁你自己开门的时候偷偷溜进屋
注:CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie,所以会自动跳转到登录界面
二、CSRF漏洞的分类
1.get型
这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用:<img src=http://漏洞地址>
在访问含有这个img的页面后,成功向http://漏洞地址,发出了一次HTTP请求。所以,
如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了
2.post型
这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单,如:
<form action=http://漏洞地址 method=POST>
<input type="text" name="xx" value="11" >
</form>
<script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作
三、常见的CSRF方式
1. <img>标签属性
<img src=“http://漏洞地址”>
2.<script>标签属性
<script src=“http://漏洞地址”>
3.<iframe>标签属性
<iframe src=“http://漏洞地址”>
4.JavaScript方法
Image对象
<script>
var foo = new Image();
foo.src = “http://漏洞地址”
</script>
四、CSRF漏洞防御
1.增加 增加Token验证(常用做法)
对关键操作增加Token参数,token必须随机,每次都不一样
2.关于安全的会话管理(避免会话被利用)
不要在客户端保存敏感信息(比如身份验证信息)
退出、关闭浏览器时的会话过期机制
设置会话过机制,比如15分钟无操作,则自动登录超时
3.访问控制安全管理
敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧密码
敏感信息的修改使用POST,而不是GET
通过HTTP头部中的REFERER来限制原页面
4.增加验证码
一般在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)