CSRF攻击
1.攻击原理
- 1.用户登录信任网站A
- 2.验证通过,并在用户浏览器处产生A的Cookie
- 3.用户在没有登录A网站的情形下,访问了黑客网站B
- 4.B网站要求访问第三方站点A,发送一个请求
- 5.根据B在第4步的请求,浏览器带着第2步产生的Cookie访问A
- 6.这步在实际中并没有发生。但其等效于B向A发送请求。由于A并不知情请求的来源,它根据请求中带有的用户的Cookie,处理第5步的请求,这样B就达到了模拟用户操作的目的。
2.攻击示例
CSRF攻击可以在受害者毫不知情的状况下以受害者名义伪造请求发送给受攻击的站点,从而在并未授权的情况下执行在权限保护之下的操作。
攻击步骤:
- 1.Bob对银行的网站发送请求
http://bank.example/withdraw?account=Bob&amount=10000&for=Tom,将10000元的存款转到Tom的账号下 - 2.该请求发送到网站后,服务器会先验证该请求是否来自于一个合法的Session,并且该Session的用户Bob已经成功登陆
- 3.攻击者Mary也有自己的账户,它可以自己发送一个请求给银行
http://bank.example/withdraw?account=Bob&amount=10000&for=Mary,但这个请求是来源于Mary,而不是Bob,不能通过安全认证,因此该请求不会起作用 - 4.Mary想要通过CSRF的方式完成攻击。他先自己做一个网站,在网站中放入以下代码
src="http://bank.example/withdraw?account=Bob&amount=10000&for=Mary",并且诱使Bob来访问他的网站 - 5.当Bob访问该网站时,上述URL就会从Bob的浏览器发送给银行,而这个请求会附带Bob浏览器中的Cookie一起发向银行的服务器。一般情况下,该请求会失败,因为他要求Bob的认证信息。但如果Bob当时恰好刚刚访问完他的银行账户后不久,他的浏览器与银行网站之间的session尚未过期,浏览器的cookie之中含有Bob的认证信息。这个URL请求就会得到相应,钱将从Bob的账号转移到Mary的账号
3.CSRF的几种防御策略
- 验证HTTP Referer字段
- 在请求地址中添加token并验证
- 在HTTP头中自定义属性并验证
4.CSRF和XSS的区别
- CSRF攻击的主要目的是让用户在不知情的情况下攻击用户已登录的网站站点,类似于钓鱼网站
- XSS攻击的主要目的是,想办法获取目标攻击网站的Cookie,有了Cookie信息就可以在任意能连接互联网的PC登录攻击目标网站,并以获取的其他人的身份登录,做一些破坏