• 一文带你学习跨站点请求伪造(CSRF)


    1.何为CSRF

    CSRF的全名是Cross Site Request Forgery,翻译成中文就是跨站点请求伪造

    CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任

    例如现在有一个网站,只需要请求这个URL,就能够把编号为“156713012”的博客文章删除。

    http://blog.sohu.com/manage/entry.do? m=delete&id=156713012
    
    • 1

    攻击者首先在自己的域构造一个页面:

    其内容为:

    <img src="http://blog.sohu.com/manage/entry.do? m=delete&id=156714243" />
    
    • 1

    攻击者诱使目标用户访问这个页面,从而执行CSRF攻击

    该用户看到了一张无法显示的图片,但是不幸的式此时该用户的博客已经被删除

    在这里插入图片描述

    回顾整个攻击过程,攻击者仅仅诱使用户访问了一个页面,就以该用户身份在第三方站点里执行了一次操作。

    这个删除博客文章的请求,是攻击者所伪造的,所以这种攻击就叫做“跨站点请求伪造”。

    CSRF漏洞的根本是:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的💄


    2.浏览器的Cookie策略

    浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另一种是“Third-party Cookie”,也称为“本地Cookie”。

    两者的区别在于,Third-party Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,所以这种Cookie会保存在本地;而Session Cookie则没有指定Expire时间,所以浏览器关闭后,Session Cookie就失效了。

    例如:

     php
    header("Set-Cookie: cookie1=123; ");
    header("Set-Cookie: cookie2=456; expires=Thu, 01-Jan-2030 00:00:01 GMT; ", false);
    ?>
    
    • 1
    • 2
    • 3
    • 4

    IE出于安全考虑,默认禁止了浏览器在