csrf漏洞原理及防御

1.什么是csrf?

     CSRF 的全称是“跨站请求伪造”,而 XSS 的全称是“跨站脚本”。看起来有点相似,它们都是属于跨站***——不***服务器端而***正常访问网站的用户,但前面说了,它们的***类型是不同维度上的分 类。CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。

严格意义上来说,CSRF 不能分类为注入***,因为 CSRF 的实现途径远远不止 XSS 注入这一条。通过 XSS 来实现 CSRF 易如反掌,但对于设计不佳的网站,一条正常的链接都能造成 CSRF。

例如,一论坛网站的发贴是通过 GET 请求访问,点击发贴之后 JS 把发贴内容拼接成目标 URL 并访问:

http://example.com/bbs/create_post.php?title=标题&content=内容

那么,我只需要在论坛中发一帖,包含一链接:

http://example.com/bbs/create_post.php?title=我是&content=哈哈

只要有用户点击了这个链接,那么他们的帐户就会在不知情的情况下发布了这一帖子。可能这只是个恶作剧,但是既然发贴的请求可以伪造,那么删帖、转帐、改密码、发邮件全都可以伪造。

2.csrf漏洞的原理

    捕获.JPG

    捕获1.JPG

       捕获2.JPG

    CSRF***事件的跟踪图

        1.jpg

3.CSRF可以做什么?

  你这可以这么理解CSRF***:***者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全

4.csrf的常见触发点

     捕获3.JPG

5.csrf漏洞的危害

         捕获8.JPG

         捕获9.JPG

          捕获10.JPG

6.csrf漏洞配合xss漏洞进行密码修改

7.csrf漏洞防御

.        捕获11.JPG  

  • 服务端进行CSRF防御

      服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数

       (1).Cookie Hashing(所有表单都包含同一个伪随机值):

                  这可能是最简单的解决方案了,因为***者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:>

            (2).验证码   这个方案的思路是

                         每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄....这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

       (3).One-Time Tokens(不同的表单包含一个不同的伪随机值)

                   在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提 交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单 都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

  • 通过 验证 HTTP Referer 字段在请求地址中添加 token 并验证 或者在 HTTP 头中自定义属性并验证

  • 尽量不要在页面的链接中暴露用户隐私信息。

  • 对于用户修改删除等操作最好都使用post 操作 。

  • 避免全站通用的cookie,严格设置cookie的域。


猜你喜欢

转载自blog.51cto.com/13905896/2300853
今日推荐