学学CSRF攻击的原理与防范
什么是CSRF 跨站点请求伪造
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
攻击步骤:
- 浏览登陆网站A
- 网站A用户验证通过,在用户客户端产生cookie
- 用户在没有登出A网站的情况下,访问到了危险网站B
- 网站B对网站A发送恶意请求
- 浏览器带着恶意请求之前保存的cookie访问网站A
- 因为带着cookie,网站A以为是用户在操作,处理了网站B的恶意请求。从而达到了模拟用户操作的目的。
常见的CSRF攻击类型
- get类型的CSRF 只需要一个http请求 在受害者访问含有这个img的页面后,浏览器会自动向http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker发出一次HTTP请求,bank.example就会收到包含受害者登录信息的一次跨域请求。
- Post类型的CSRF 这种类型的CSRF利用起来通常使用的是一个自动提交的表单,如:
<form action="http://bank.example/withdraw" method=POST>
<input type="hidden" name="account" value="xiaoming" />`
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script>
复制代码
- 链接类型的CSRF 链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击
CSRF的特点
- 攻击发起方为第三方网站,而不是被攻击的网站。
- 攻击者利用用户的登陆凭证,冒充用户进行操作,而不是窃取数据
- 跨站请求可以有很多方式,如图片,表单,超链接
CSRF和Xss的区别
XSS是代码注入问题,Csrf是HTTP问题 XSS是没有进行输入过滤导致将攻击者的输入当代码执行 CSRF是因为浏览器发送请求的时候自动带上了Cookie
如何防御
- 验证码:完成验证码操作才能处理请求
- token:token 验证的 CSRF 防御机制是公认最合适的方案