当前位置:首页 » 密码管理 » 同源ip访问

同源ip访问

发布时间: 2022-12-27 08:59:34

1. 浏览器同源策略

所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 javaScript 的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到 XSS、 CSFR 等攻击。
(1)、比如一个web应用,用户访问的页面,处理页面的请求的controller都是在同一个contextPath下的,无论在页面上请求AController还是BController,页面、A、B都是同源的,所处的空间位于同一个contextPath下。
(2)、 同源策略是为了安全,确保一个应用中的资源只能被本应用的资源访问。否则,岂不是谁都能访问。

2. Cookie 的同源和同站

原文地址: https://alphahinex.github.io/2021/05/30/same-origin-and-same-site-of-cookie/

description: "Cookie 中的同源,等价于同站?!"
date: 2021.05.30 10:34
categories:
- Web
tags: [Web, HTML]
keywords: origin, site, same origin, cross origin, same site, corss site, CSRF, SOP, port, cookie

存储在浏览器中的数据,如 localStorage 和 IndexedDB ,是以 源(origin) 进行分割的。每个源都拥有自己单独的存储空间,一个源中的 JavaScript 脚本不能对属于其它源的数据进行读写操作,即所谓的 同源策略(SOP) 。

然而 Cookie 在受同源策略约束时,使用不同的源的定义方式。

通常来讲:

而根据 Cookie 的现行标准规范 HTTP State Management Mechanism (rfc6265) :

即,相同 host,不同端口的服务之间,cookie 是可以共享的!

另外:

由上可知,Cookie 不提供根据 scheme 和 port 的隔离性,也就是说:

Cookie 中同源的定义,等价于不考虑 scheme 的同站(schemelessly same site)定义!

默认情况下,Cookie 可以在 eTLD + 1 相同的站点间进行共享!

另外,服务端可以通过响应的 Set-Cookie Header,对 Cookie 的可用性进行设定,相关的属性包括 Domain 、 Path 、 Secure 等。

比如通过 Path 属性,可以指定允许获得 Cookie 的 URL 路径前缀。

现行的 rfc6265 标准是 2011 年 4 月开始实行的,在后续的 rfc6265bis 提案的 02 版本中,在 Set-Cookie 的响应头中增加了 SameSite 属性,用来约束对 Cookie 的跨站访问行为,以提升安全性,降低 CSRF 攻击的风险。

该提案的最新版本为 draft-ietf-httpbis-rfc6265bis-07 (将于 2021 年 6 月 10 日到期),此版本中 SameSite 属性有三个值:

在此版本提案中,对于同站的定义增加了 scheme 部分,即与最新的 HTML 标准一致: scheme 和 eTLD + 1 同时相同,才能够认为是同站(same site)。

3. 电信网络里面常讲的‘同源同宿’是什么概念

一般高速网络数据分析系统都是采用多核服务器,每个cpu核心上会运行一个进程(或线程)并行处理,目前的系统都是由软件把网卡收到的流量分发到每个CPU核心上的报文缓冲区,分发过程中,要求同一个连接的双向数据要分到同一个进程中,这就是同源同宿。在一些复杂的应用环境中,同源同宿的要求也会很复杂,可以不是对单个连接的,而是对一个网段的,也就是说,要求把某个网段的所有的数据分流到1个进程。专利号为“200910136299.

2”、发明名称为“一种格状网中非同源同宿主备业务资源分离的方法”公开了一种格状网中非同源同宿主备业务资源分离的方法,其步骤为1.源节点的业务管理模块接收到第一业务的建立请求,触发路由计算模块计算路由,信令控制模块开始建立第一业务;2.路由泛洪模块完成资源标识信息更新;3.源节点的业务管理模块接收第二业务的建立请求,触发路由计算模块根据主备业务资源分离策略进行路由计算;4.信令控制模块开始建立第二业务;5.路由泛洪模块完成资源标识信息更新。本发明所述方法,能处理主备不同源但同宿、主备同源不同宿、主备不同源也不同宿三种情况下的主备业务资源分离,而且可以应用于格状网和环网组网共同组成的网络中,也可以用于格状网单独组成的网络中,方法可靠性高、稳定性好。专利号为“CN200610086536.5”、发明名称为“一种负载分流方法和装置”公开了
一种负载分流方法,包括在互相重叠的各小区所属的基站之间建立同步;基站检测到自身小区当前的信道无法满足负载要求,向与该小区重叠的小区的基站请求空闲信道,并将各小区的基站返回的空闲信道标识发送给各分流用户设备。本发明同时公开了一种负载分流装置,包括同步建立模块,负载检测模块,分流负载小区确定模块和负载分流模块。本发明解决了无线通信系统中的小区负载过大而造成的频谱资源紧缺的问题;且本发明可根据各互相重叠的小区的空闲信道情况,灵活选择分流负载小区,合理利用了频谱资源,且不需要增加额外开销。另外,分流用户设备在与新小区建立连接之前,会一直保持与原小区的连接,保证了用户设备的业务服务质量。实现同源同宿的方法一般是把报文的源ip和目的ip做对称的位运算,在进行复杂的同源同宿计算时,因为网段的掩码可以非常灵活,一般是在软件中实现的,软件对每一个报文,提取出ip后,根据同源同宿要求,对ip进行掩码运算后做位运算,得到报文应该分发到的进程号。在高速网络上,软件对每个报文的同源同宿计算,往往成为系统的瓶颈。

4. 同源策略与跨域问题解决

如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的

举个例子:

下表给出了相对 http://a.bbb.com/dir/page.html 同源检测的示例:

由同源策略导致的的AJAX请求失败

例如:页面路径为: http://127.0.0.1:8848/fileTest/test.html

后台接口地址为: http://localhost:8080/sayHello

产生的结果:

此即为跨域请求失败

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了AJAX只能 同源 使用的限制。

在此之前,需要知道 简单请求、复杂请求

简单请求:

某些请求不会触发 CORS 预检请求 。本文称这样的请求为“简单请求”,请注意,该术语并不属于 Fetch (其中定义了 CORS)规范。若请求满足所有下述条件,则该请求可视为“简单请求”:

复杂请求:

与前述简单请求不同,“需预检的请求”要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。"预检请求“的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。当请求满足下述任一条件时,即应首先发送预检请求:

若需要跨域,则需要在请求头里添加 Origin 字段

请求至后台若符合后台请求规则则可成功请求,并且后台会返回相应的规则

当请求为复杂请求时,浏览器会在请求前先发送一个 OPTIONS 请求

OPTIONS 是一个预检请求,与简单请求不同的是它会额外携带两个参数: Access-Control-Request-Method :该次请求的请求方式 Access-Control-Request-Headers :该次请求的自定义请求头字段

OPTIONS 发送至后台若后台成功响应,则继续发送复杂请求,若响应失败则不会发送复杂请求

继续发送复杂请求

(1)、OPTIONS不会携带body若后台方法上使用@RequestBody注解,则会报错:

例如:

此时需要在@RequestBody后添加参数required=false,允许body为空

即可解决该问题

(2)、OPTIONS请求不应被过多的发送,因为它也是一个http请求也会占用一部分资源,相应的一种解决方法

在响应中添加缓存字段,以减少OPTIONS请求

(1)、在Java web工程中加如下列过滤器即可

(2)、在nginx中配置

使用反向代理工具解决跨域问题:如 Nginx node.js

以Nginx为例:

在Nginx的配置文件中加入:

启动Nginx再以

http://127.0.0.1/fileTest/test.html 地址访问页面

http://127.0.0.1/sayHello 访问后台接口

发现可正常请求

上述以

http://127.0.0.1/fileTest/test.html 地址访问页面

http://127.0.0.1/sayHello 访问后台接口

的方式遵循了,浏览器的同源策略自然不存在跨域

Nginx代理了页面请求和接口请求,所以页面请求和接口请求都在Nginx源内由Nginx去完成页面请求和接口的请求即: http://127.0.0.1:80 内

所以浏览器访问页面和接口都是以 http://127.0.0.1:80 来进行访问的,满足了同源策略自然不存在跨域之说

图解:

跨域:

Nginx代理,满足同源策略

Nginx反向代理其实是一种欺骗浏览器的方法

[1] http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html 浏览器同源政策及其规避方法

[2] http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html XMLHttpRequest Level 2 使用指南

[3] http://www.ruanyifeng.com/blog/2016/04/cors.html 跨域资源共享 CORS 详解

[4​] https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS HTTP访问控制(CORS)

5. 跨域以及解决跨域的几种方式

跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能 同源 使用的限制。

同源策略 是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议 + 域名 + 端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
常见的跨域场景:

对于简单请求,浏览器会直接发出CORS请求,具体的就是在头信息中,增加一个 Origin 字段。

非简单请求是那种对服务器有特殊要求的请求,譬如 put delete 方法,或者 Content-Type 字段类型是 application/json 的,非简单请求在正式通信前,会增加一次请求,称为预检请求,也就是 options 方法。

浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。

与简单请求不同的是, option 请求多了2个字段:
Access-Control-Request-Method :必须字段,用来列出浏览器的CORS请求会用到哪些HTTP方法。
Access-Control-Request-Headers :该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段。

服务器收到"预检"请求以后,检查了 Origin 、 Access-Control-Request-Method 和 Access-Control-Request-Headers 字段以后,确认允许跨源请求,就可以做出回应。

表明服务器支持的所有跨域请求的方法。

表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

表示是否允许发送认证信息(Cookie)。

指定本次预检请求的有效期,单位为秒,允许缓存。在缓存期间,不用发出另一条预检请求。

6. 什么是同源策略如何解决跨域

此时,客户端会出现跨域问题,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性、协议和端口号的组合.
跨域问题是由于javascript语言安全限制中的同源策略造成的.
简单来说,这里的同一来源指的是主机名1.什么是跨域
经常会在页面上使用ajax请求访问其他服务器的数据

7. Nginx的反向代理跨域

什么是跨域?

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址, b页面为域名地址,所进行的访问行动都是跨域

浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源

同ip(或domain),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写 本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略

现代浏览器在安全性和可用性之间选择了一个平衡点。 在遵循同源策略的基础上,选择性地为同源策略“开放了后门”。例如img script style等标签,都允许垮域引用资源,然而, 你也只能是引用这些资源而已,并不能读取这些资源的内容

同源策略限制以下几种行为:

1.Cookie、LocalStorage 和 IndexDB 无法读取

2.DOM 和 Js对象无法获得

3.AJAX 请求不能发送

http://www.domain.com/a.jshttp://www.domain.com/b.js 同一域名,不同文件或路径 允许http://www.domain.com/lab/c.jshttp://www.domain.com:8000/a.jshttp://www.domain.com/b.js 同一域名,不同端口 不允许http://www.domain.com/a.jshttps://www.domain.com/b.js 同一域名,不同协议 不允许http://www.domain.com/a.jshttp://192.168.4.12/b.js 域名和域名对应相同ip 不允许http://www.domain.com/a.jshttp://x.domain.com/b.js 主域相同,子域不同 不允许http://domain.com/c.jshttp://www.domain1.com/a.jshttp://www.domain2.com/b.js 不同域名 不允许

1、 通过jsonp跨域

2、 document.domain + iframe跨域

3、 location.hash + iframe

4、 window.name + iframe跨域

5、 postMessage跨域

6、 跨域资源共享(CORS)

7、 nginx代理跨域

8、 nodejs中间件代理跨域

9、 WebSocket协议跨域

正向代理 :代理位于网站和客户端中间, 客户端无法访问某网站,就将请求发送给代理服务器,代理从网站取回来再发送给客户端,网站并不知道为谁提供服务

反向代理 :客户端访问某网站的一个页面, 但是网站并没有,就偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户,用户不知道真正提供服务的是谁

对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过 检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确 处理请求,并且并不知道这个请求是来自代理服务器的。

简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实 的服务器,让它以为这个http请求是直接来自与用户浏览器的。

Location/carrots-admin-ajax/{

    proxy_passhttp://dev.admin.carrots.ptteng.com/;

}

proxy_pass 把请求代理到其他主机

两种写法hhttp://dev.admin.carrots.ptteng.com/    和     http://dev.admin.carrots.ptteng.com

    如果访问url = http://server/html/test.jsp ,则被nginx代理后

        情况1,将test/作为根路径,请求test/路径下的资源。

        情况2,则被nginx代理后,请求路径会变为http://proxy_pass/test.jsp,直接访问server的根资源。

是一个匹配规则,用于拦截请求,匹配任何以/proxy/html/开头的地址,匹配符合以后,停止往下搜索正则。

对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自与用户浏览器的。

1.执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似)

2.执行location匹配

3.执行选定的location中的rewrite指令

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件

如果循环超过10次,则返回500 Internal Server Error错误

7.参考文献

参考一: https://www.cnblogs.com/gabrielchen/p/5066120.html

参考二: http://blog.csdn.net/shendl/article/details/48443299

8.更多讨论

提问:

Q :例如img script style等标签,都允许垮域引用资源?

A :在浏览器中,并且加载的方式其实相当于一次普通的GET请求,唯一不同的是,为了安全起见,浏览器不允许这种方式下对加载到的资源的读写操作,而只能使用标签本身应当具备的能力(比如脚本执行、样式应用等等)。

Q :例如img script style等标签,都允许垮域引用资源?

A :在浏览器中,并且加载的方式其实相当于一次普通的GET请求,唯一不同的是,为了安全起见,浏览器不允许这种方式下对加载到的资源的读写操作,而只能使用标签本身应当具备的能力(比如脚本执行、样式应用等等)。

Q:JSONP和nginx跨域有什么不同

JSONP和nginx是完全不同的 是可以跨域的,而且在跨域脚本中可以直接回调当前脚本的函数

原理:是可以跨域的,而且在跨域脚本中可以直接回调当前脚本的函数

script标签是可以加载异域的JavaScript并执行的,通过预先设定好的callback函数来实现和母页面的交互。它有一个大名,叫做JSONP跨域,JSONP是JSON with Padding的略称。它是一个非官方的协议,明明是加载script,为啥和JSON扯上关系呢?原来就是这个callback函数,对它的使用有一个典型的方式,就是通过JSON来传参,即将JSON数据填充进回调函数,这就是JSONP的JSON+Padding的含义。JSONP只支持GET请求。

8. 浏览器同源策略

同源是指 "协议+域名(主域名、子域名)+端口" 三者相同,即便两个不同的域名指向同一个 IP 地址,也非同源。

下表给出了相对 http://store.company.com/dir/page.html 同源检测的示例:

浏览器中的大部分内容都是受同源策略限制的,但是以下三个标签可以不受限制:

注意, 普通的脚本和加上 type="mole" 的脚本对 CORS(跨源资源共享)的处理方式不同。

如果您在模块上下文中请求 JavaScript 文件,则响应需要定义一个 Access-Control-Allow-Origin 头,否则它将被浏览器阻止。

解决跨域的方案有很多种,详细内容可以阅读阮一峰老师的 浏览器同源政策及其规避方法 。

跨域资源共享 CORS 详解

9. 请解释一下什么叫同源策略,以及为什么浏览器会有同源策略

  1. 同源策略,它是由Netscape提出的一个着名的安全策略。

  2. 现在所有支持JavaScript 的浏览器都会使用这个策略。

  3. 所谓同源是指,域名,协议,端口相同。

  4. 当一个浏览器的两个tab页中分别打开来 网络和谷歌的页面

  5. 当浏览器的网络tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,

  6. 即检查是否同源,只有和网络同源的脚本才会被执行。

  7. 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

热点内容
电脑怎么卸载服务器管理 发布:2025-08-14 14:37:57 浏览:503
怎么看低配电脑的配置 发布:2025-08-14 14:24:16 浏览:398
安卓系统程序怎么调节成方块 发布:2025-08-14 14:23:22 浏览:663
遗传算法轴承 发布:2025-08-14 14:08:42 浏览:979
python调用restfulapi 发布:2025-08-14 13:58:07 浏览:851
怎么下载云服务器到电脑上 发布:2025-08-14 13:58:06 浏览:658
苹果搭配什么安卓手机 发布:2025-08-14 13:57:13 浏览:944
qq缓存的文件视频 发布:2025-08-14 13:50:21 浏览:386
python字符串notin 发布:2025-08-14 13:46:58 浏览:848
java数据库访问 发布:2025-08-14 13:46:22 浏览:995