美文网首页
CSRF & CORS 的区别

CSRF & CORS 的区别

作者: fanderboy | 来源:发表于2020-09-13 13:31 被阅读0次

    一、概念

    1. CSRF - Cross-Site Request Forgery - 跨站请求伪造

    2. CORS - Cross Origin Resourse-Sharing - 跨站资源共享

    二、CSRF攻击原理及实例

    1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

    2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

    1. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

    2. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

    3. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

    三、CORS 详解

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

    1、简介

    CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

    整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

    因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

    2、两种请求

    浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

    只要同时满足以下两大条件,就属于简单请求。

    (1) 请求方法是以下三种方法之一:
    
    HEAD
    GET
    POST
    (2)HTTP的头信息不超出以下几种字段:
    
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
    

    这是为了兼容表单(form),因为历史上表单一直可以发出跨域请求。AJAX 的跨域设计就是,只要表单可以发,AJAX 就可以直接发。

    凡是不同时满足上面两个条件,就属于非简单请求。

    浏览器对这两种请求的处理,是不一样的。

    参考自:http://www.ruanyifeng.com/blog/2016/04/cors.html

    相关文章

      网友评论

          本文标题:CSRF & CORS 的区别

          本文链接:https://www.haomeiwen.com/subject/hlvnektx.html