苹果浏览器非私人连接,为什么浏览器要限制跨域访问

文章 2年前 (2023) admin
0

Ted Nelson 曾经谈过文学二神 —— 读者和作家,它们都是无敌的:作家可以想写什么就些什么,而读者可以选择什么也不读。不过现在我们有三个神,读者、作家还有中间人,它们任一方都不是无所不能的。

为什么浏览器要限制跨域访问?

背景

Ted Nelson 曾经谈过文学二神 —— 读者和作家,它们都是无敌的:作家可以想写什么就些什么,而读者可以选择什么也不读。不过现在我们有三个神,读者、作家还有中间人,它们任一方都不是无所不能的。

浏览器一直在做的假设是,任何时候只要用户开始使用互联网应用,这个应用就开始尝试攻击这个用户,也就是说互联网应用是默认不可信的,浏览器在它们可能做的任何事情上都加了限制,而且也对互联网应用开发者提供有限的关于这些限制的报错信息。因此这是一个对程序非常不友善的环境,除非这个程序是一个很简单的不访问任何互联网数据的程序。

跨站脚本攻击(XSS)

最早迫使浏览器采用不信任互联网应用这个设计思想的攻击,就是跨站点脚本攻击。在这种攻击中,一个恶意的人员刀疤哥会向普通用户爱丽丝 发送一封电子邮件,邮件里有一个指向刀疤哥的网站的链接。爱丽丝毫无防备心地点击链接,让浏览器加载网页刀疤网,浏览器允许 JavaScript 程序默认在任何网页上运行,因此刀疤网上会有一个 JS 程序在爱丽丝的设备上运行,访问爱丽丝设备上她能访问的一些数据,然后秘密发送数据到刀疤哥的服务器上。

程序可以通过各种访问 爱丽丝的私有数据。一种是爱丽丝正在使用的计算机可能位于防火墙内,该防火墙允许她进行隐式访问她家中的网络摄像头或她大学的期刊库等等资源。之所以说隐式访问,是因为这些访问可以在没有与爱丽丝进行任何交互的情况下完成,或者也可以通过要求她登录系统以让程序获得一些凭据(例如 Cookie)来完成。网站刀疤网也可能是她使用的某个银行官网的虚假版本,一个钓鱼网站,它要求她以某种借口向银行或社交网络进行身份验证。这个钓鱼网站将数据返回给刀疤哥的方法有很多,例如将到的数据放到刀疤网的 URL 后面,发送 GET 请求,这样刀疤网的服务器就能拿到数据。跨站脚本攻击可能有很多变种,这里说的是最一般的思路。

跨域资源共享(CORS)

浏览器开发者的第一个冲动可能就是完全阻止 JavaScript 程序进行任何互联网访问,这样它们就没法偷偷上传用户数据了。但显然互联网应用的开发者需要他们的 JS 程序能够进行网络访问。例如,银行肯定需要加载一个程序,通过上传用户输入的信息来向银行服务器请求关于这个用户的不同日期、不同账户的更多数据。显然必须允许上传数据才能实现这些交互。

但我们不会允许这些数据被上传到刀疤哥的服务器上,这就是同源策略,只要程序在同一个互联网域名(如 http://www.icbc.com.cn )的网页中运行,那么程序可以与这个域名下的任何服务器地址进行交互。URI 中的协议和域名就组成了我们所说的「源」。因此同源政策(Same Origin Policy, SOP)说的就是,来自某一个服务器「源」的数据,以及来自这个服务器的程序的数据,都与来自任何其他源的任何数据分开。这使银行的程序能够很好地运作,又不会暴露隐私。

有什么场景之中同源策略是不可用吗?这还是有的,任何需要程序去访问其他域名下的数据的场景都会被同源策略阻碍到。例如如果有一个网站想提供一个 JavaScript 程序来检验、测试或者仅仅访问另一个网页,那么它没法访问那个网站上的数据,也就没法达到它的设计目的。

另一个例子是数据融合。当开始公开大量的开放公共数据时,有一些网站会开始涌现,这些网站从许多不同的开放数据站点加载数据并提供数据的「融合」—— 组合许多不同来源的数据,并提供可视化,从而让用户享受到单一数据源所不能提供的洞察力。但实际上,典型的纯前端的数据融合网站现在已经无法工作了。

那么有什么替代方案?浏览器制造商实现了一些钩子以允许数据在不同的源上共享,并称之为跨域资源共享(CORS)。核心问题是 —— 如何在浏览器中区分数据,区分私人的网络摄像头数据和公开的开放数据?我们无法改变网络摄像头,但我们可以改变开放数据发布者。浏览器制造商现在要求开放数据发布者在 HTTP 响应中为任何完全开放的数据添加特殊的 CORS 头:

Access-control-allow-Origin: *

同时他们添加了一项功能,允许数据发布者指定有限的其他可信来源,这些来源将被允许访问数据发布者产生的数据。

例如银行可以允许可信的信用卡公司的程序访问银行的源下的用户数据,这可以使得运营银行变得更容易:

Access-control-allow-Origin: credit card company.example.com

这意味着发布公开数据的人需要在他们的任何 HTTP 响应里加上

Access-control-allow-Origin: *

这意味着给互联网上随机的开放数据者带来大量的工作量,可能这些开放数据提供方会因为各种原因没法给所有响应都加上这一条响应头。这使得他们的数据只能被浏览器直接访问,而没法被互联网应用利用。

浏览器事实上不直接查看这些响应头,而是在一个前驱(Pre-flight)的 OPTIONS 请求里查看,这个请求会自动插入到其他主要的请求之前。所以当开发者在开发者工具里看到主要的请求时,其实已经有几轮请求发生了。

响应头拦截

除了阻止访问数据以外,CORS 系统还会阻止不同源的服务器的响应头发送给互联网应用。如果不想被阻止,服务器必须加上另一个响应头:

Access-Control-Allow-Headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate上述的响应头里必须包含一些东西,比如「Link」。这些是一般会被浏览器阻止的响应头,你也可以把任何其他的应用和服务器需要因其他目的而是用的响应头加进去。

HTTP 方法拦截

作为习题留给读者思考。

例子

官方的示例 SoLiD 服务器通过这种来允许跨域资源访问。

对 CORS 的调整

这里我们要说的调整是:CORS 的设计者事实上故意使其变得更加难使用。

有人会一种感觉,我明白,就是如果允许数据发布者简单地把 ACAO:* 加在在他们发布的内容上,这会是一个,让 用户很容易自废武功的设计。

这里的「用户」当然不是普通用户,而是指配置网络服务器的系统管理员。我们担心的是系统管理员会发现浏览器封锁了对其数据的访问,为了解决这个问题,他们只会在任何地方都加上这个响应头,即使某些数据实际上并不应该被公开。例如,他们提供了不同版本的页面给不同的用户,此时保持用户之间的数据隔离是很重要的,但他们会受到诱惑用ACAO:*来把所有数据都标识成可以访问的。

因此,只要传入的请求中带有用户凭据信息,浏览器就会阻止服务器使用 ACAO:*。 每当用户「登录」时,如果你愿意,明确地使用他们登录时上传的身份信息。

但是,有时系统需要访问来自另一个源的用户私有的信息,例如前述的银行的例子。对于这种使用凭据的情况,只允许访问 Access-Control-Allow-Origin 响应头中明确指定了的源。

麻烦的是 HTTPS:互联网现在分为两个网络,一个是我们用来登录和传递凭证的网络,而另一个是低安全性的网络。问题在于,如果你开发的不是最终用户顶级应用程序,而是一个中间件,一个代码库,你只能调用浏览器来做网络操作,以及用于处理密码或 TLS 的浏览器 API,必要时得进行登录。中间件的代码没法知道整个过程。

这意味着,如果你的服务器发布的是完全公开的数据,例如开放数据,你希望任何代码都能够访问你的数据,系统管理员之间的经验法则是你应该总是回应任何请求头相同的源。相比于用这个:

Access-control-allow-origin: *

所有的开放数据服务器应该发送这个:

Access-control-allow-origin: $(RECEIVED_ORIGIN)

此处的 $(RECEIVED_ORIGIN) 就用请求头中的源来替换。

这可能会比向所有公共数据服务器添加固定字段更复杂。不过这是一个进步,可以让代码来干活,而不是简单地让人去改改配置 —— 这需要让每一个开放数据发布者都配合。

要向数据发布者解释清楚这些东西简直像打一场战役,战役的结果是到处都可以搜到这些代码片段。事实上 Apache 都把这个搞成了一个内部的环境变量[@@ref]

难道没有更好的设计来设置静态标头吗,例如

Access-control-allow-origin: PUBLIC_AND_UNCUSTOMIZED

这样系统管理员就不会把一些私密的东西随便暴露出去了,或者也可以用用户的身份来定制化?可能有的人会这么想。不过这就是现在 CORS 实现的。

所以,世界上的数据发布者都开始把 CORS 源配置通过反射添加到响应头里了。

但一旦你要使用反射式加源的响应头,很关键的一点事允许把 Origin 加到 Vary: 响应头里,如果你有 Vary: 的话。如果没有,就加上一个:

Vary: Origin到每一个通过反射来配置 ACAO 的响应头里。

不然的话,这里有一个失败的例子:

站点A上的程序向服务器请求公共开放数据

服务器使用 ACAO 响应头头响应数据

浏览器缓存该响应

用户使用站点B上的其他程序查看相同的数据

浏览器使用缓存副本,但其上的源A与请求站点B不匹配。

浏览器以静默阻止了请求,用户和开发者感到十分费解

因此,在正常运行的基于 CORS 的系统中,服务器发送 Vary:Origin 响应头,并强制浏览器为每个请求它的 Web 应用程序保留不同的数据副本,这非常具有讽刺意味,因为这些数据副本可能是完全公开的数据,不需要做任何隐私考量。

CORS设计在历史上大多数时候都是整个网络中最糟糕的设计。但现在,那些设计像 Solid 这样的系统的人必须创建一个不受 XSS 攻击影响的系统,数据将是在用户的控制下完全对外公开或者完全对外不可见,并且 Web 应用程序将被各种不同的社交流程视为可信赖的。

后记: 对CORS的第二次调整

对CORS的第二次调整是在浏览器还没完全实现完第一次调整的时候发生的。

Notwithstanding issues with the design of CORS, Chrome doesn’t in fact do it properly.

If you request the same resource first from one origin and then from another, it serves the cached version, which then fails cord because the Origin and access-control-allow-origin headers don’t match. This even when the returned headers have “Vary: Origin”, which should prevent that same cached version being reused for a different origin.

尽管 CORS 的设计存在问题,但 Chrome 实际上也并没有正确地实现它。如果你首先从一个源请求相同的资源,然后从另一个源请求相同的资源,浏览器将尝试提供缓存版本,然后由于 Origin 和access-control-allow-origin 响应头不匹配而失败。即使返回的响应头具有 Vary:Origin,这也应该防止相同的缓存版本被重用于不同的源。

问题出现于 Chrome Version 59.0.3071.115 (Official Build) (64-bit)

火狐在 2018-07 也出了同样的问题。

苹果浏览器非私人连接,为什么浏览器要限制跨域访问

私人充电桩安装后怎么联网充电?

私人充电桩联网可以通过自带wifi进入充电桩设置联网即可。

步骤一:充电桩安装完成并通电后,用手机可以搜到一个TeslaWallConnector开头的wifi信号,选择连接,密码在充电桩说明书上。

步骤二:连上这个wifi后,打开手机浏览器,输入192.168.92.1,就进入了充电桩功能设置界面。(注意:警报选项不能点击,该功能是记录充电桩报警或故障信息的。)

步骤三:点击【Wi-Fi】就可以进入可以设置充电桩连wifi,如果充电位置没wifi,可以用手机开热点。wifi设置界面如下:

步骤四:点击【软件】即可查看当前系统版本,可以在线检查更新。

无线显示无网络连接确能发送信息?

1.

查看手机设置 查看状态栏是否有WiFi图标,或进入设置--WLAN,查看是否已成功连接WiFi。另外进入设置--其他网络与连接--私人DNS,查看是否设置了私人DNS,如有开启,建议将私人DNS设置为关闭再重试。

2.

排查WiFi 请对比其它手机连接相同WiFi是否正常,确认是WiFi还是手机原因。如是WiFi原因,请重启无线路由器查看。部分公共WiFi需要通过浏览器认证后才能联网。

3.

查看联网权限 请进入手机的i管家--流量管理/流量监控--联网管理 或 设置应用与权限--权限管理,查看应用联网权限是否已开启。

4.

排查环境原因 如果手机距离路由器较远,虽然显示有WiFi信号,但实际可能无法上网,

iCloud是什么?

说到iCloud,这是苹果产品用户们的老熟人。可是因为这个纯英文的名字,让很多用户一头雾水,望而却步。

就像苹果产品的很多功能一样,有很多用户很少使用,甚至没用过、不会用,让这些功能闲置、沉睡。

这是个挺遗憾的事,乔布斯泉下有知,会很伤心的。

那么iCloud究竟是什么?有什么实际功能?怎么使用呢?

Cloud的意思是“云”,“cloud computing”即云计算,是互联网上的一种资源利用新。

iCloud的意思就是“苹果云”,是苹果公司提供的云端服务。它由苹果公司在2011年正式发布。

众所周知,“云计算”是近些年才流行的科技。而苹果公司在十余年前就关注、发布,由此可见苹果公司的前瞻性和科技引领地位。

当时还在世的乔布斯的设计观点是,iCloud是一个与以往云计算不同的服务平台,苹果提供的服务器不应该只是一个简单的存储介质,它还应该带给用户更多。

iCloud的特点和功能优势具体是什么呢?

其一,无线传输数据信息。

iCloud是苹果公司为苹果用户提供的一个私有云空间,目的是方便用户在不同的苹果设备之间共享个人数据。

说的通俗点,iCloud就是“云盘”,类似于百度云盘之类的。

相比苹果传统的iTunes方案需要数据线连接,iCloud是无线传输数据,更容易操作,用户体验更便捷、高效。

例如为了节省设备上的空间,用户拍摄的全分辨率照片原图会自动上传至 iCloud。设备上会为每张照片保存尺寸较小的版本,用户在需要时可以下载照片原图。

其二,所有苹果设备共享信息。

说得通俗、实用的话,iCloud可以将苹果用户的个人信息存储到苹果的服务器,然后通过无线网络,这些信息会自动推送到用户手中的所有苹果设备上,包括iPhone、iPod Touch、iPad、Mac电脑,形成苹果设备之间的内部生态共享圈。

也即,苹果产品的用户,只需在苹果任一个设备上存储信息,那么无需从第一个设备,可以通过无线网络,从其它苹果设备就可以提取所存储备份的信息,实现无缝对接。这样就使得提取信息更便捷、高效。

也就是说,iCloud是个中转站、共享仓库,让你在苹果设备之间随时随地随心、畅快地提取、享用信息。

小到通讯录、日历、提醒事项、邮件、Safari 浏览器等,大到文档、图片、文件、电子书、音乐、视频、从 App Store 购买的应用软件等,都可以实现苹果设备之间的信息同步传输、共享、存取。

例如,你在iPhone上建立了一个文档,那么这个文档会自动传输到iCloud。然后你可以在苹果其它设备上找到这个文档,进行阅读、编辑。iCloud则可以继续实时储存你的最新阅读、编辑记录,供你在其它的苹果设备上继续阅读、编辑。

再如,你通过苹果的APP Store购买了一款应用软件,安装在你的 iPhone上。后来,你想把这个应用软件安装在你的iPod touch 上。那么,你通过登陆iCloud ,可以查看购买记录。

由于你已购买过这个应用软件,因此无须再次支付费用,可以直接将这个应用软件下载、安装到你的其它苹果设备上。

而且,有了这个功能,就可以随时随地与其他人协作,共享、编辑文档。只需发送一个私人链接,对方就能即时访问你选择共享的文件夹和文件。你可以设置他们查看、共享或编辑每个文件的权限,还能随时更改这些设置。

其三,保持自动更新、存储信息。

用户对文件信息做出的每一次更改,会自动在自己名下所有苹果设备上同时更新、存储。

例如你通过iPod,从 iBookstore 下载了一部电子书,iCloud 则会自动储存,并将它推送到你其它的苹果设备上,无需支付额外的费用。

那么,你可以在iPad 上阅读、编辑,iCloud 也会同时自动更新你的阅读、编辑记录,你可以在任意一部苹果设备上继续阅读、编辑。

其四,空间可以扩容。

按照苹果公司的设计,每位用户有 5GB 的iCloud免费存储空间。

当然,用户还可以随时升级到 iCloud+。升级到 iCloud+ 后,可以拥有更多储存容量空间。

而且,升级到 iCloud+之后,你还能享用隐藏邮件地址功能,以及扩展的 HomeKit 安防视频支持。

HomeKit 安防视频的摄像头,可以录制、分析并随时随地查看你的家庭安防影像。而且录制的视频不会占用iCloud 的存储用量。

另外,所有 iCloud+ 方案均可通过“家人共享”,与家庭成员共用同一个订阅,并保持各自的照片、文件等内容不共享。

其五,恢复数据文件。

除了同步存储、传输信息之外,iCloud还有个重要功能就是恢复数据文件。

例如当你误删手机里的数据和信息后,或者因为手机损坏而无法查看数据和信息时,就可以对手机进行数据恢复。

再如,你的苹果设备丢失或者购买了新的设备,仍能从icloud找回存储的原始信息。

方法很简单,就是登陆icloud,调阅之前同步存储在icloud的信息。

这是不是个意外的惊喜呢?!

其六,手机版、电脑版、网页版本都有。

而且,iCloud不仅有手机版还有电脑版,使得商务办公、生活休闲更便捷。

用户可通过 iOS 和 iPadOS 上的文件 app、Mac 上的“访达”、Windows PC 上的“文件资源管理器”,或者通过 iCloud.com ,访问存储在iCloud的自己的所有文件。

说了这么多的功能,苹果用户们赶紧把iCloud开通、用起来吧,不要让它闲置在你的设备里。

广电192号段来了?

还是让喜欢第一个螃蟹的人尝尝鲜吧,咱们已经用了十几二十年的号码是不会轻易换号的,除非比三大运营商更优惠,否则很难有换号的想法。

广电192号段,豹子号、对子号听名字挺唬人的,但是不太看好广电,咱们国家已经被移动、联通、电信三家运营商垄断了,所有的一切都是他们说了算。

新增加的广电,是想从这三家运营商当中分蛋糕,表面上是增加了一个竞争对象,其实估计早就在背后协商好了规则,分蛋糕可以,不能破坏市场。

有了第四家运营商,用户多了一个选择,然而在咱们这个人情社会里面要想生存下去,广电还是得遵从另外三家运营商的游戏规则,因此对咱们用户来说不会有大的优惠。

广电的规划是,将打造“手机+电视+宽带+语音+直播卫星+x”全融合业务体系,看起来跟移动的路线差不多。

广电跟是合作关系,已经完成了20万个700M的5G建设,今年还将完成28万个700M的5G建设,这样来看是在推进广电的业务。

广电的192号段的最低消费是159月一个月,最低在网时长3年,最低预存2000元,看着挺高的。

不过还有媒体曝光了广电的套餐资费详情,共分为12档,4G套餐的资费是19元、39元、59元、69元,现在的优惠价打6折分别是11元、23元、35元、41元。5G套餐的资费是89元、119元、159元、189元…,6折优惠价是53元起。

写在最后

我个人不看好广电会让用户带来非常大的优惠,想要从3大运营商分蛋糕,而且还跟合作建5G基站,这等于是三大运营商搞了另外的“套餐”一样,想要生存下去,还得遵循三大运营商分游戏规则。只求多了一个运营商大家的套路少一点,不要再坑我们用户了。

版权声明:admin 发表于 2023年1月3日 下午8:48。
转载请注明:苹果浏览器非私人连接,为什么浏览器要限制跨域访问 | 热豆腐网址之家

相关文章