CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

admin 2024年3月26日00:10:56评论3 views字数 1313阅读4分22秒阅读模式

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

关键词

跨域

前言

最近在挖SRC时遇到了JOSNP和CORS,但是进行JSONP劫持和CORS跨域请求的尝试却失败了,后来经过研究发现根本原因是cookie跨域的限制造成了,遂有了这篇文章。

关于cookie跨域的分析

影响cookie跨域的samesite和secure

2016年开始,Chrome 51版本对Cookie新增了一个 SameSite属性,为了防止CSRF攻击,陆续的各大厂商的浏览器也都适配了该属性,该属性限制了在不同情况下cookie的跨域。而Secure则是规定了cookie是否可以在http下传输,如果Secure为true,则仅在使用https时才会携带cookie。

  • 下图为不同SameSite设置的效果,当然也可以不设置SameSite,大多数浏览器在不设置SameSite时默认为Lax

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

指的一提的是,一般情况下如果设置SameSite为None,也要同时设置Secure,否则一些浏览器可能会拒绝仅有SameSite=None的设置。

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

在不同浏览器上的实验

上面的描述只是标准,具体的效果还要依赖于浏览器的实现,这里进行一波实验来验证一下上述和标准和各个浏览器的实现。

先使用小皮面板创建两个站点,test1.com和test2.com,test1.com注意设置为https访问。

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

在test1.com上部署一个设置cooke的前端页面test1.com/cookieSetting.html和一个后端处理脚本test1.com/getCookie.php,还有一个测试cookie是否携带的页面test1.com/json.php,如果携带cookie就会返回账户密码,否则返回error。在test2.com则部署一个跨域测试的html页面crossSite.html,来测试各种跨域的cookie携带情况

CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

关于CSRF、JSONP和CORS的cookie跨域

经过上面的分析,在什么时候可以进行跨域其实已经很明了了

  • CSRF使用get和input进行跨域,当使用get进行跨域时,除了SameSite=strick的情况,都可以携带cookie;当使用post进行跨域时,按照标准,只有SameSite=None和Secure被设置时才能携带cookie。但是由于很多浏览器的实现不标准或者对于不设置SameSite的处理较为模糊,有时不设置SameSite或设置SameSite=None而不设置Secure时允许input跨域携带cookie,这要视浏览器的实现而定。

  • JSONP劫持依赖<script src>访问敏感信息,如果希望<script src>携带cookie,只有SameSite=None的时候才可以

  • CORS配置不当,对于CORS的设置就不多说了,在Access-Control-Allow-Credentials为true的前提下,由于CORS的跨域依赖的是ajax和fetch,要在这种情况下携带cookie进行跨域,同样也只有SameSite=None的时候才可以

   END  

原文始发于微信公众号(安全圈):【安全圈】CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月26日00:10:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CRSF、JSONP劫持、CORS配置不当中的cookie跨域问题https://cn-sec.com/archives/2602923.html

发表评论

匿名网友 填写信息