精华内容
下载资源
问答
  • 同源策略是浏览器安全的基石,它限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,本文主要介绍同源策略的各个方面。概述1995年,同源策略由Netscape公司引入浏览器,目前所有的浏览器都实行这个...

    4a8b72c8b1cf203ab7a40e8b6780997f.png

    同源策略是浏览器安全的基石,它限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,本文主要介绍同源策略的各个方面。

    概述

    1995年,同源策略由Netscape公司引入浏览器,目前所有的浏览器都实行这个策略。

    定义

    同源指的是一下相同:

    • 协议相同:同为http或https
    • 域名相同
    • 端口相同

    约束

    • 允许跨域写操作(Cross-origin writes)。例如链接,重定向以及表单提交。特定少数的HTTP请求需要添加preflight。
    • 允许跨域资源嵌入(Cross-origin embedding)。
    • 不允许跨域读操作(Cross-origin reads)。

    以下是可能嵌入跨源的资源的一些示例:

    • <script src="..."></script> 标签嵌入跨域脚本
    • <link rel="stylesheet" href="..."> 标签嵌入CSS
    • <img>嵌入图片。支持的图片格式包括PNG,JPEG,GIF,BMP,SVG,...
    • <video><audio>嵌入多媒体资源
    • <object>, <embed><applet> 的插件
    • @font-face 引入的字体。一些浏览器允许跨域字体( cross-origin fonts),一些需要同源字体(same-origin fonts)
    • <frame><iframe> 载入的任何资源。站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互。

    跨源数据存储访问

    不同源,以下行为会收到限制:

    • Cookie,localStorage, IndexedDB无法读取
    • DOM无法获得
    • Ajax请求发送后被浏览器拦截(并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了)

    注:不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains) 访问 cookie。设置 cookie 时,你可以使用Domain,Path,Secure,和Http-Only标记来限定其访问性。

    跨源脚本API访问

    Javascript的APIs中,如 iframe.contentWindow, window.parent, window.openwindow.opener 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对 Window 和 Location对象的访问添加限制。

    Window

    允许以下对 Window 属性的跨源访问:

    方法window.blurwindow.closewindow.focuswindow.postMessage

    属性 window.closed.window.frames.window.length.window.location.window.opener.window.parent.window.self.window.top.window.window

    Location

    允许以下对 Location 属性的跨源访问:

    方法location.replace

    属性 URLUtils.href只写.

    如何允许跨源访问

    参考整理的另一篇文章 跨域方式

    参考

    https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy

    http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

    展开全文
  • 已拦截跨源请求:同源策略禁止读取位于 http://47.55.32.128:8081/abj_api/Login/GetRoleFunctions?roleId=800 的远程资源。(原因:CORS 请求未能成功)。 web.config配置 <system.webServer> <modules ...

    已拦截跨源请求:同源策略禁止读取位于 http://47.55.32.128:8081/abj_api/Login/GetRoleFunctions?roleId=800 的远程资源。(原因:CORS 请求未能成功)。

    后台接口提供方需要做如下修改:

    Global.asax配置,添加如下方法

      protected void Application_BeginRequest(object sender, EventArgs e)
            {
                System.Web.HttpApplication app = sender as System.Web.HttpApplication;
                HttpResponse response = app.Response;
                //支持跨域        
                if (app.Request.HttpMethod == "OPTIONS")
                {
                    //支持跨域
                    response.AddHeader("Access-Control-Allow-Methods", "*");
                    response.AddHeader("Access-Control-Allow-Headers", "*");
                    response.AddHeader("Access-Control-Allow-Origin", "*");
                    response.AddHeader("Cache-Control", "no-cache");  
                    response.StatusCode = 200;
                    response.End();
                }
                else
                {
                    response.AddHeader("Access-Control-Allow-Origin", "*");
                    response.AddHeader("Access-Control-Allow-Headers", "*");
                    response.AddHeader("Access-Control-Allow-Methods", "*");
                    response.AddHeader("Cache-Control", "no-cache");
                    //response.AddHeader("Access-Control-Allow-Methods", "GET, POST,PUT, DELETE");
                    //response.AddHeader("Access-Control-Allow-Headers", "Content-Type");
                }
            }
    
    展开全文
  • 上一篇文章带大家了解了SSO的相关内容,这篇文章针对我在实现SSO的demo中额外学的同源策略以及CORS做一个记录。同源策略和CORS一:同源策略什么是同源策略同源策略(same-orgin policy)是一种约定,web是构建在同源...

    上一篇文章带大家了解了SSO的相关内容,这篇文章针对我在实现SSO的demo中额外学的同源策略以及CORS做一个记录。

    同源策略和CORS

    同源策略

    什么是同源策略?

    同源策略(same-orgin policy)是一种约定,web是构建在同源策略之上的,浏览器是针对同源策略的一种实现。同源策略最初是指不同源的A网页的cookie不能被B网页的获得,后来扩展对dom操作,XmlHttpRequest也做了限制

    何为同源?
    • 协议相同

    • 域名相同

    • 端口相同

    只有同时满足以上三个条件才谓之同源

    同源策略的三个方面
    1. Cookie同源策略:不同源cookie不共享

    2. DOM同源策略:禁止对不同源的页面dom操作,主要针对的是iframe跨域

    3. XmlHttpRequest同源策略:禁止使用XmlHttpRequet向不同域发起请求,例如ajax请求

    下面看一下ajax跨域请求,浏览器的显示

    <html><head>    <title>AJAX跨域测试title>    <script src="js/jquery.min.js">script>head><body><button class="btn">请求baidubutton><script>    $(".btn").click(function(){        $.ajax({            url:"http://www.baidu.com",            type:"get"        })    })script>body>html>

    点击button,ajax发起跨域请求

    看一下Chrome显示

    4ed06bc5b64e64c1be3a87578fe36112.png

    火狐

    538ce8949061051e2832332b6aaa8e00.png

    为何要有同源策略

    同源策略的目的就是保障用户的信息安全,防止恶意网站窃取数据,下面通过DOM和XmlHttpRequest来说明

    如果没有Dom同源策略
    1. 现在有一个假网站,通过iframe嵌入了一个银行网站

    2. 通过设置将银行网站的宽高设置到合适比例,让这个假网站在浏览器上面除了url不同,其他都和银行网站一模一样

    3. 用户在iframe嵌套的银行网站中输入了密码和账户名称

    4. 在iframe的外层通过dom操作获得用户的密码和账户

    5. 这样用户的密码和账户信息就被窃取了

    如果没有XmlHttpRequest同源策略
    1. 用户登录银行网站,提交登录表单,银行服务器通过验证,为了维持对话返回Cookie

    2. 这时用户又浏览了另一个网站,而这个网站就是一个恶意网站

    3. 恶意网站后台向银行网站发起ajax请求,请求携带第一步银行的cookie,银行服务器通过cookie验证了用户身份,响应这个假冒用户的请求

    4. 这样用户的信息又泄漏了,而且是后台发起ajax请求,所以用户不会感知到这个过程

    所以在同源策略的保护下,我们可以安全的上网

    CORS

    跨域限制

    因为同源策略,所以浏览器的跨域请求被限制,但是有些时候跨域操作又是必须的;例如在CAS实现SSO的过程中,就需要在访问子系统的时候将浏览器重定向到CAS Server。

    解决方案之CORS

    CORS(cross orign resource sharing)即跨域资源共享,是一个W3C标准,它允许浏览器向不同源的服务器发起XmlHttpRequest请求,从而克服了AJAX,重定向只能同源使用的限制

    CORS的实现需要浏览器和服务器的同时支持,整个CORS的通信过程是在后台进行的,不需要用户的参与,浏览器会根据跨域请求,自动为请求的request header额外添加一些字段,对于部分跨域请求还会在真正发出跨域请求之前发送一个preflight请求。

    目前所有的浏览器都支持CORS,IE浏览器版本不能低于IE10,所以实现CORS的关键在于服务器,我认为这也正常,因为你是跨域访问我,不是我的人,还想要的资源,肯定得征得我同意呀。

    俩种请求

    浏览器将CORS请求分为俩类:简单请求和非简单请求

    简单请求需要同时满足以下俩个条件

    1. 请求方法是 HEAD,GET,POST之一

    2. HTTP的头字段不能超出以下几个

    AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type: 只限于三个值application/x-www.form-urlencded,multipart/form-data,text/plain

    凡不是简单请求的都是非简单请求(废话!!!)

    简单请求跨域流程

    1. 对于简单跨域请求,浏览器会直接向服务器发起请求,并且在请求头中添加Origin字段来说明源信息例如协议端口域名。

    2. 服务器可以通过这个字段来决定是否同意这次请求。Origin的源在服务器允许的范围内,那么服务器就会在response中添加一个Access-Control-Origin :true,如果服务器不允许,那么在浏览器端发现响应中没有Access-Control-Origin字段就会抛出一个错误。

    3. 默认浏览器不会跨域携带Cookie,如果需要,ajax请求需要设置属性withCredentials属性为true,服务器需要设置相应头部Access-Control-Allow-Credentials:true

    非简单请求跨域流程

    对于非简单跨域请求,浏览器会在真正发起请求前先发起一个Preflight请求给服务器,请求method使用OPTIONS,头部会加入下列信息

    Origin : 源信息Access-Control-Request-Method : 列出请求使用的方法Access-Control-Request-Headers:自定义的头部信息

    看一个例子,实践出真知

    $(".btn").click(function(){    $.ajax({        url:"https://www.baidu.com",        type:"get",        headers:{            "CONTENT":"TEST"        }//添加了自定义headers,所以是非简单请求    })})

    浏览器F12查看network,果然浏览器提前发送了preflight请求,并且添加了相关字段

    1e41b51fbc8b70b9fc9384824123e678.png

    发送preflight后,服务器端可以根据Origin,Access-Control-Request-Method和Access-Control-Request-Headers决定是否允许请求,在允许的响应中会添加如下字段

    Access-Control-Allow-Origin:与简单的请求相同。*代表同意任何跨域请求Access-Control-Allow-Methods: 允许的方法,多个方法以逗号分隔。Access-Control-Allow-Headers: 允许的头部,多个方法以逗号分隔。Access-Control-Max-Age: 应该将这个 Preflight 请求缓存多长时间(以秒表示)。Access-Control-Allow-Credentials: 允许携带Cookie

    如果不允许,服务器返回正常的HTTP响应,但是没有任何的CORS相关的头信息,浏览器就会认定,服务器不同意预检请求,因此触发一个错误

    如果允许,以后每次浏览器正常的CORS请求,就和普通请求一样了。

    具体服务器可以设置一个拦截器

    @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {    String originHeader = request.getHeader("Origin");    response.setHeader("Access-Control-Allow-Origin", originHeader);    response.addHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With,accessToken");    response.addHeader("Access-Control-Allow-Credentials", "true");    response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");    return true;}

    参考文章

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

    https://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

    https://juejin.im/post/6844903681683357710#comment

    ------------------

    最后

    我是不想当码农的小白,平时会写写一些技术博客,推荐优秀的程序员博主给大家还有自己遇到的优秀的java学习资源,希望和大家一起进步,共同成长。

    以上内容如有错误,还望指出,感谢

    公众号点击交流,添加我的微信,一起交流编程呗!

    公众号: 小白不想当码农

    945ca7b9cb06d67ffde9a523da3f650d.png

    展开全文
  • 本文分享的Writeup是作者在做Keybase.io的漏洞众测中发现的SOP(同源策略)绕过漏洞,由于Keybase.io在用的多个API端点都启用了CORS(跨域资源共享)机制,这种缓解同源策略的机制某种程度上克服了同源策略的严格限制,...

    43daf276308569b5e7a4d140434b618f.png

    本文分享的Writeup是作者在做Keybase.io的漏洞众测中发现的SOP(同源策略)绕过漏洞,由于Keybase.io在用的多个API端点都启用了CORS(跨域资源共享)机制,这种缓解同源策略的机制某种程度上克服了同源策略的严格限制,可以让不同域服务器间实现交互请求。而作者在测试中发现了Keybase的CORS策略错误配置,利用这种缺陷,可以操纵浏览器缓存获取用户敏感数据信息。一起来看看。

    Keybase 是一个开源的跨平台即时通讯工具,在 PC 设备上支持 macOS、Linux 和 Windows 平台,并提供 Chrome/Firefox 浏览器扩展。此外还提供 iOS 和 Android 版本。和众多 IM 工具相比,Keybase 最吸引人的地方在于免费使用且不会受到任何广告骚扰,最重要的是它还是一个开源项目。

    在安全性和隐私方面,Keybase 采用了端到端的加密方式,承诺会为每个用户的群组、文件和聊天等数据提供安全保护。如果这些数据上传到云中,也会进行加密处理。

    漏洞前言

    Keybase在当前用户向其他用户发送加密消息时,可以让当前用户通过一个API接口去查找其他Keybase用户,在该接口中提供了加密发送消息时所需的,如公钥等其他Keybase用户公共信息。这听起来貌似是安全的,是吧?

    该API接口的CORS(跨域资源共享)策略配置如下:

    Access-Control-Allow-Origin: *

    Access-Control-Allow-Methods: GET

    Access-Control-Allow-Headers: Content-Type, Authorization, Content-Length, X-Requested-With

    Access-Control-Allow-Credentials: false

    在了解这个CORS配置问题之前,我们先来厘清几个重要的知识点:

    1、Access-Control-Allow-Origin中的星号“*”说明,任意外部域名都能与该API进行交互,执行跨域的请求调用;

    2、Access-Control-Allow-Credentials中的“false”说明, 这里可能出于安全考虑,服务器不允许用户在跨域请求中包含代表身份信息的Cookie。此处Access-Control-Allow-Headers暴露的用户认证头信息和接下来要讲的漏洞关系不大,因为在查询上述API接口中用不到。

    漏洞情况

    自然地,由于上述那个可查询的API接口是公共的,所以在进行跨域请求时无需携带防御CSRF(跨站请求伪造)的token信息,因为用户在使用Keybase.io时是经过身份验证的,且他的会话信息存储在了Cookie中,只有一些非常敏感的API接口会要求在请求头中携带用户认证头token。

    后来我发现,如果在消息加密验证和发送环节,用上述那个查找其他Keybase用户的API来查找我自己,哪怕输入我名字中的一个字母,搜索结果中就会匹配到我的一些账户信息,其中竟然包含了我的一些敏感信息,如:

    邮箱地址

    我使用和剩余的邀请码数量

    计费信息

    上一次登录的时间戳、邮件形式的时间/日期验证码

    TripleDes加密的PGP私钥

    但是,我并没有私钥存储在Keybase上啊,之后我才了解到这是Keybase的在2015到2016年的一个遗留功能,现在已经不再实施。

    经测试,一旦我在上述API请求中Cookie信息被删除,我的个人敏感信息也不会再返回显示。但是,我在服务端对该API的响应消息中发现了一个名为 ‘Etag’ 的消息头,这是一个浏览器缓存标记头,代表客户端请求资源未发生变化,那么浏览器就可以从用户的缓存内容中去取出然后响应给用户。

    Payload与漏洞利用

    我想起Twitter用户@Bitk_曾用过一个技巧,那就是用javascript的fetch API方法去强制从浏览器缓存中直接发起一个跨域请求,而恰巧 Keybase 在这里未曾对服务端响应头部署过任何缓存控制头(Cache-Control)措施,于是,我就在本地构造了如下的Payload

        

    如果上述Payload请求能成功执行,可能就会返回响应一些Keybase的缓存信息,基于此,我执行了一个身份验证请求,最终有效地返回了与我账户相关的一些个人敏感信息。如下:

    48b89707edfb2207ccaa2a7ee63f2bb1.png

    为了确认Payload是否被成功执行,从下图的浏览器请求信息中可以看到,fetch方法直接从浏览器缓存中读取了我的身份信息。

    48b89707edfb2207ccaa2a7ee63f2bb1.png

    漏洞上报及处理进程

    2019.12.19   漏洞初报

    2019.12.19   两小时后,Keybase在响应消息中中加入了‘Cache-Control: no-store’

    2019.12.24   Keybase奖励了$1,500 公布漏洞

    *参考来源:enumerated,clouds 编译整理,转载请注明来自 FreeBuf.COM

    64bfbade1d53b03fed8221091d3d1ac2.gif

    精彩推荐

    b2b38cbbdabec9bfb948c189b72fca57.png

    dfd565233b47a2c3d9ed6e8cde434aa1.pngc74d8daf2e2bbb01a52e4c390f700d32.png

    eea514a6dc39529d4d0cb691aa3a8a43.png6045b83d2f9e53578c4d00b88a0bee5b.gif

    展开全文
  • 我相信如果你写过前后端分离的web应用程序,或者写过一些ajax请求调用,你可能会遇到过CORS错误。... 要了解什么是CORS(Cross-Origin Resource Sharing:跨站资源共享),首先我们需要了解什么是同源策略S...
  • 前言众所周知浏览器的同源策略及跨域的方法在前端面试中也是出场率极高的问题,本文主要跟大家分享了关于前端面试时会遇到的同源和跨域问题,下面话不多说了,来一起看看详细的介绍吧。同源1.同源的概念同源(也叫...
  • 浏览器的同源策略并没有拦截请求,而是拦截请求的返回。意思是请求最终还是会发送到服务器,而服务器最终还是会返回结果,只是返回的结果被拥有同源策略的浏览器拦截了。CRSF:跨站请求攻击。当你在A网站输入了登录...
  • 已拦截跨源请求:同源策略禁止读取位于 http://192.168.43.207:8080/manager/login?name=hao&password=111 的远程资源。(原因:CORS 请求未能成功)。 IE中可以正常运行,但Firefox报错,参考了官方文档...
  • 下面介绍一组基础控制策略;企业策略需求:1. 禁止域用户修改ip地址。2. 禁止域用户自动更新。3. 确保用户密码复杂性要求。4. 域用户登录桌面后自动禁用本地guest来宾用户。5.禁用本地管理员账户6.由域服务器统一...
  • 已拦截跨源请求:同源策略禁止读取位于 http://localhost:9001/eduservice/chapter/getChapterVideo18 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 已拦截跨源请求:同源策略禁止读取位于 ...
  • 已拦截跨源请求:同源策略禁止读取位于 http://请求地址:8081/schoolUser/getTelecomNetWorkNumber 的远程资源。如何解决。 这种跨源请求禁止读取的原因是:CORS 头缺少 'Access-Control-Allow-Origin',所以在要...
  • 已拦截跨源请求:同源策略禁止读取位于 http://XXXX/x 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin') 同源策略:(来自百度)  同源策略(Same origin policy)是一种约定,它是浏览器...
  • 问题:Vue项目浏览器端不断请求sockjs.js-node/info?XXX 原因: SockJS 是一个 JavaScript 库(用于浏览器),提供类似 Web 套件的对象。SockJS 为我们提供一个连贯的跨浏览器 Javascript API,它在浏览器和 Web ...
  • 已拦截跨源请求:同源策略禁止读取位于XXXXXXXXXXXXXXXX/demo_test.txt 的远程资源。(原因:CORS 请求不是 http) 原始代码index.html在附录中 ###############################################################...
  • Header("Access-Control-Allow-Origin: * "); Header("Access-Control-Allow-Methods: ...已阻止跨源请求:同源策略禁止读取位于 http://xxx.xxx.com 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')
  • 已拦截跨源请求:同源策略禁止读取位于 http*****的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 CORS一般不需要在浏览器配置,浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息之...
  • 例如在读取消息时,一个消费者没有读取到,而另一个消费者却读取到了,因为这个消费者读取的是 leader 副本,显然这样是不行的。所以为了保证一致性,只使用一个 leader 副本来提供服务。 2.Commit 策略 Commit:指 ...
  • 已阻止跨源请求:同源策略禁止读取位于 http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer?f=json 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 ...
  • 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8888/department/findAll 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 配置: 前端: axios.js // 1. axios的默认配置 axios....
  • 已阻止跨源请求:同源策略禁止读取位于 http://www.***.cn/getcode.aspx?id=2222222222222222&callback=jsonp1450266336118 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 明明
  • 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8080/*的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
  • 请求访问的地址:[url=... var settings = { "async": true, "crossDomain": true, ... "postman-token": "790bc9ac-1215-ff3e-2293-ecc3d6eb0c0a" ...温馨提示:上面那个接口是别人的,我修改不了,没有源代码
  • (5)IF检测自噬潮autophagic flux 自噬过程进行观察和检测 细胞经诱导或抑制后,需对自噬过程进行观察和检测,常用的策略和技术有: (1)观察自噬体的形成 由于自噬体属于亚细胞结构,普通光镜下看不到,因此,...
  • 解决浏览器出现的【已拦截跨源请求:同源策略禁止读取】问题 在 HttpServletResponse 中 添加返回信息 response.addHeader("Access-Control-Allow-Origin", "*");
  • 已拦截跨源请求:同源策略禁止读取位于 http://192.168.x.x:x/xxx 的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin’)。 谷歌: Access to XMLHttpRequest at ‘http://192.168.x.x.:xxx’ from ...
  • 火狐浏览器设置步骤: 1.进入火狐配置页进行设置 ,地址栏输入"about:config" ...3.搜索”security.fileuri.strict_origin_policy”,并设置该项为false 4.重启浏览器,可以跨域访问 谷歌浏览器: 不支持,别浪费力气了 ...
  • 同源策略禁止读取位于 https://bm.kehuoa.com/api/auth/login 的远程资源。 宝塔nginx配置 server { listen 80; listen 443 ssl http2; listen [::]:443 ssl http2; listen [::]:80; server_name ...
  • 同源策略禁止读取位于 http://apps.bdimg.com/libs/bootstrap/3.3.4/fonts/glyphicons-halflings-regular.woff2 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。</p>...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 181
精华内容 72
关键字:

同源策略禁止读取位于