#yyds干货盘点# 关于跨域问题的探讨:cors、csrf

网友投稿 382 2022-10-05


#yyds干货盘点# 关于跨域问题的探讨:cors、csrf

定义介绍

CORS,全称Cross-Origin Resource Sharing ,是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。

CSRF,全称Cross-site request forgery,跨站请求伪造,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻.击方法。跟跨网站脚本

但看上面的定义,即使看了十遍百遍,都是难以真正的完全理解。必须要自己去分析、测试。

详解CORS

前面说过了很多关于跨域请求的内容,跨域请求的定义大家应该很清楚了,而CORS也是不陌生了, 说白了CORS 就是跨域的时候,是否共享(其实就是表明“是否允许”,不共享就是禁止跨域的意思咯)。但两者的范畴不一致,内涵不一样。明显跨域请求 != CORS。 浏览器有一种机制限制跨域请求,这种机制正是CORS。

但是CORS到底是怎么样一种机制呢? 是完全浏览器的行为吗? 其实也不是,我理解是浏览器和服务器(跨域目标服务器)之间共同的跨域协议。

其实SOP也是如此。SOP,即浏览器的同源策略(Same-origin policy,下面简称SOP)用来控制document及其里面的script如何访问不同域的资源,政策大家都听过。但SOP的实现则都是完全浏览器行为, 和服务器后台无关了!

而CORS通过返回一个​​Access-Control-Allow-Origin字段,可以使浏览器不对回应进行拦截,从而实现跨域访问。而服务器这端实际上总是进行回应的。​​

sop 完全是浏览器的行为,但是只能限制跨域目标的服务器的响应,换句话说,限制不了跨域请求的发出。

细节很多,但不是很难,这里不再赘述。

cors 是也是。 但是服务器端可以放宽限制,从而使得浏览器允许,让跨域请求成功并返回到浏览器。

csrf 深入探讨

CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的攻.击方式。是指 A 网站正常登陆后,cookie 正常保存,其他网站 B 通过某种方式调用 A 网站接口进行操作,A 的接口在请求时会自动带上 cookie。

上面这个描述,我认为是不太准确的。 可能存在,但没有说明 “某种方式” 是何种方式。 据我所知,在浏览器的B网站 发起对A网站的访问, 浏览器 是不会自动携带A的cookie 的!  也就是说, 上面的描述, 有些误人子弟,把问题描述得过于简单。

测试一下:

可见上面的请求头中 并没有cookie

cors 和 csrf的关系和区别

csrf 是一种网站攻.击行为。具体就是:

1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;4. 网站B接收到用户请求后,返回一些攻,击性代码,并发出一个请求要求访问第三方站点A;5. 浏览器在接收到这些攻.击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

从上面可以看到cors 、csrf 和 跨域都是有一定关系的,但是也不能对等,而差别还有些的大。这个理解一定要到位,否则就容易被笑话。

我认为它 其实是在 cors基础上的攻.击, 就是说,如果目标服务器不允许跨域,那么csrf 是无法展开的。 但是cors 如果开启了, 并不能阻止csrf攻.击。

就是说,如果cors 允许跨域访问,那么就可能被某些恶意用户发起csrf 攻,击,因此需要防范 csrf。

上面的描述,其实很容易搜索得到,但是,个人认为是不太准确, 浏览器在B网站请求访问网站A,用户当然是不知情,但浏览器自然是知道的, 但是 B网站是无法拿到A网站的cookie的, 即使用户没有登出A网站 。 但是不排除B 网站通过某些手段获取到了A网站的cookie,那么,这个时候,B 网站确实可以发出跨域请求。

上面的图, 不知道是哪个国人制作的,广为流传。但是,我认为啊,不准确,误人子弟。

但是,A网站的跨域共享策略,跨域很容易禁止cookie访问, 就是说允许跨域,但是不允许携带cookie。

但是,如果某些时候,A 不得不允许携带cookie 的跨域访问。 那么 cors 就防不住了。

总之,csrf 的发挥空间是很小的。

同时,如果,请求过程中,经过的某个代理、或者中间人, 修改了请求的 请求头,比如  referer, origin ,那么跨域请求就变成了 普通的同域请求,那么就防不胜防了。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【网络安全入门】Goby工具主要特性有哪些?
下一篇:JavaWeb实现简单用户发送邮件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~