CSRF攻击

42 阅读3分钟

CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。

一、CSRF 攻击流程:

1、攻击者实现一个bad.com

2、受害者登录 good.com,并保留了登录凭证 Cookie

3、攻击者 引诱 受害者访问了 bad.com

4、bad.com 向 good.com 发送了一个请求good.com/act=xx,浏览器会默认携带 good.com 的 Cookie (疑问 这个请求会跨域吗,是用表单请求的原因所以不会跨域吗,如果是ajax发起请求,是肯定会跨域的)

在网上找了一些文档

为什么 form 表单提交没有跨域问题

浏览器的策略本质是:一个域名下面的JS,没有经过允许是不能读取另外一个域名的内容,但是浏览器不阻止你向另外一个域名发送请求。

所以form表单提交没有跨域问题,提交form表单到另外一个域名,原来页面是无法获取新页面的内容,或者说form提交后不需要返回,但是ajax是需要返回的。

ajax是想要读取响应内容,浏览器是不允许你这么做的。

世界本无跨域,是浏览器不允许js访问别的域,但是浏览器却没有限制自己,img标签和script标签都是可以加载其他域的图片或者js文件。这不就是jsonp的跨域嘛,利用浏览器的历史兼容性。

浏览器的安全策略限制的是js脚本,并不限制src,form表单提交之类的请求。就是说form表单提交不存在安全问题,ajax提交跨域存在安全问题。

5、good.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求

6、good.com 以受害者的名义执行了 act=xxx

7、攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 good.com 执行了自己定义的操作

二、CSRF 防御

cookie设置httpOnly属性 并不能防止csrf,只能防xss

设置了HttpOnly属性的cookie变量无法被js获取,而XSS就是在别人的应用程序中恶意执行一段JS以窃取用户的cookie,所以为关键Cookie设置HttpOnly属性可以有效防止XSS攻击(Cross Site Scripting  跨站脚本攻击)。

CSRF漏洞

  csrf漏洞:中文名称跨站请求伪造,攻击者冒充用户身份执行用户操作

  漏洞原理:

    1、用户登录信任网站在未退出的情况下访问攻击者构造的恶意网站

    2、恶意网站发出访问第三方网站的请求,信任网站收到请求以用户信息访问

    3、攻击者在用户不知情的情况下冒充用户身份访问成功

  检测漏洞:抓取一个请求包,去掉referer字段进行访问,如果访问有效则存在漏洞

  危害:盗用用户身份、执行用户操作,修改信息

  防护方法:

    1、设置referer字段;但是并不是所有服务器在任何时候都可以接受referer字段,所以这个方法存在一定的局限性

    2、设置验证码;在用户操作的过程中设置身份确认的验证码,该方法会很有用,不过验证码频繁的话会影响用户体验

    3、设置token值,在用户请求中设置一个随机没有规律的token值可以有效的防止攻击者利用漏洞攻击

链接:www.jianshu.com/p/a1ffea3f9…