服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

轻松理解什么是同源策略

日期: 来源:信安之路收集编辑:myh0st

同源策略是浏览器的一种安全策略,用于隔离不同网站之间的资源,防止不同网站之间的资源滥用,本文将从三个部分讲解同源策略:

  • 第一点 what:什么是同源策略?

  • 第二点 why:为什么需要同源策略?

  • 第三点 how:如何解决经典的跨域问题?

0x01 什么是同源策略?

早期的互联网应用,大多只有纯文本,随着互联网的发展,网页资源越来越丰富,比如其他文档、媒体资源、cookie、javascript 命名空间等,为了能够在浏览器范围内,能够安全的进行实体交互,Netscape 工程师设计开发了 SOP(同源策略)的规则用于管理这些资源之间的关系。

说起来,同源策略就是浏览器为了不同网站之间的资源安全的访问而制定的一系列策略,关于同源策略,需要解决两个问题:

1、什么样的情况下属于同源?

首先我们要理解一个网页的不同组成部分:协议、主机、端口,比如:

https://www.xazlsec.com:443/

其中 https 为协议、www.xazlsec.com 为主机、443 为端口,认识这个之后,不同的浏览器所设置的同源规则有所差异,比如谷歌浏览器和火狐浏览器认为只有协议+主机+端口都一致的情况下才是同源,而 IE 浏览器不管端口只要协议+主机一致,则认为是同源。

下面以 https://www.xazlsec.com/dir/test.html 为基准,看看下面的 url 是否同源(以谷歌浏览器为例):

网址结果原因
http://www.xazlsec.com/dir/page.htm同源协议、主机和端口匹配
http://www.xazlsec.com/dir2/other.htm同源协议、主机和端口匹配
http://www.xazlsec.com:81/dir/test.htm不同源相同的协议和主机,但端口不同 (81)
https://www.xazlsec.com/dir/test.htm不同源同一主机,但架构/协议 (https) 不同
http://demo.xazlsec.com/dir/test.htm不同源架构和端口相同,但主机不同 (demo.xazlsec.com)
http://xazlsec.com/dir/test.htm不同源主机不同(xazlsec.com)
http://www2.xazlsec.com/dir/test.htm不同源主机不同 (www2.xazlsec.com)

2、不同源之间的资源访问规则是什么样的?

不同源之间的资源默认是不允许相互访问的,除了以下几个特例:

  • 页面链接,比如 a 标签

  • 重定向

  • 表单提交

  • 跨域资源的引入,比如 script、img、link、iframe 等标签

同源策略定义的规则如下:

  • 每个网站都有自己的资源,比如 cookie、dom 和 Javascript 命名空间

  • 每个页面的来源都来自于 URL( 通常是协议、域名和端口)

  • 脚本在它所加载源的上下文中执行,从哪里加载资源并不重要,只有最终执行的地方才重要

  • 许多资源都是被动资源,无法访问它们所加载上下文中的对象和资源

基于这些规则,假如站点 A 是起源站:

  • 可以从源 B 加载的脚本,但是不能脚本执行是在 A 的上下文中

  • 可以从源 B 加载 CSS 文件,但是无法获取源 B 的 css 原始文件

  • 可以通过 iframe 从源 B 加载页面,但是无法通过 iframe 加载源 B 页面的 DOM 对象

  • 可以从源 B 加载图像,但是无法获取该图像的像素

  • 可以播放源 B 的视频,但是无法捕获该视频的截图

也就是有了这些规则,丰富的 web 内容才可以受到安全合理的保护,但是在实际的应用过程中,或多或少会存在跨域资源访问的情况,为了解决这类问题,出现了多种跨域资源访问的解决方案,比如 XmlHTTPRequestJSONPXDomainRequest 和 CORS。

0x02 为什么需要同源策略

要说为什么,那么假如没有同源策略会怎么样?比如:

  • cookie 是每个网站都特有的内容,用于区分不同用户的身份,假如没有同源策略,在访问任意网站时,都会携带所有浏览器保存的 cookie,一方面其他网站的身份信息会存在泄漏的风险,另一方面 cookie 值的命名会存在重复,导致身份信息不可用

  • iframe 可以加载任意网站的网页内容,假如没有同源策略,可以通过 iframe 获取任意网站的内容,如果访问的内容中包含用户的敏感信息,那么就会存在信息泄漏的风险,以这种方式伪造网站,足以以假乱真

0x03 如何解决经典的跨域问题?

前文中提到过,为了解决跨域请求资源的问题,需要使用 XmlHTTPRequestJSONPXDomainRequest 和 CORS 进行扩展。

XmlHTTPRequest

XmlHTTPRequest 是一种 HTTP 通信方法,支持资源之间的异步通信,避免每次更新内容都要刷新网页。

XmlHTTPRequest 可以向不同的源发送请求,但是无法读取响应的内容,除非同源。

JSONP

JSONP 是一种 hack 技术,并不是官方解决跨域的手段,JSONP 只能进行 GET 请求,主要利用 <script> 标签来发起请求,来达到突破浏览器同源策略的目的。

XDomainRequest 

XDomainRequest 是微软在 IE8 和 IE9 中的实现,实现方式与 CORS 几乎相同。

CORS

CORS 是一套跨域资源共享机制,基于 HTTP 头实现,允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。

0x04 总结

本文算是一个科普文,了解浏览器的同源策略是怎么一回事,这个基础对于前端问题的学习至关重要,比如 xss 漏洞的利用、CSRF 漏洞的利用等。

相关阅读

  • 优秀SHRBP必备的五大能力

  • HR要走进业务已经成为一种大势所趋,那么必然也带来一个问题:HRBP应该站在哪个视角看问题,是偏业务还是偏人力资源?这或许是一个伪命题。戴维·尤里奇在1996年曾提出一个词叫做:“
  • 什么是战略人力资源管理?

  • 旭辉集团&DHR课堂战略赋能型培训管理者实训营现火热报名中!DHR会员可享8折优惠!点击下图 立刻咨询过去,战略人力资源管理是一项行政职能,如今,这一重任逐渐转移到了HR部门。HR部
  • 2023 年,不想用 360 浏览器,如何用 Flash?

  • 2023 年,如何玩 4399 的 Flash 小游戏?而且,我不想用某数字的浏览器,也不想用“特供版本”的 Flash,最好还能绕开繁琐的设置,一键使用。今天就来解决这个问题。01复活 Flash2020
  • 强势解锁VIP会员,禁止传播!

  • 这里是一路软件,一个简洁 · 高效的公众号 前言: 今天给大家分享看小说、听书、看漫画的一款集合型神器,番茄小说大家应该都听说过,可以说是小说界的杠把子了目前,但是
  • 三套提案,给你灵感...

  • 新年之后想必大家都在忙着提案吧今天再分享三套希望对大家有所帮助Part 1 |太白山拾吾院Part 2 |太白万万峰Part 3 |绿城桂语径云
  • 某地产年度推广策略方案

  • 某地产年度推广策略方案往期热文1、房地产案场管理全流程2、营销策划总全流程(必看)3、置业顾问超级冠军打造特训营4、地产营销硬核狙击战5.0-营销操盘手特训5、新格局、新视

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 轻松理解什么是同源策略

  • 同源策略是浏览器的一种安全策略,用于隔离不同网站之间的资源,防止不同网站之间的资源滥用,本文将从三个部分讲解同源策略:第一点 what:什么是同源策略?第二点 why:为什么需要同源
  • 开工大吉,聊聊学习方法

  • 各位好,好久不见,今天就要开工了,这个月比较特殊,身体经历了病毒的侵袭,结束了三年的疫情封控,一切都在慢慢恢复,当然学习信息安全技术,提升技术能力也势在必得,今天就来聊聊什么样的
  • 特大优惠

  • 新年新气象,今天给大家送福利,首先是一个信安之路特色红包封面‍‍‍其次是针对信安之路曾经的老朋友,送一张 99 元星球续费优惠券最后是针对信安之路的新朋友,首先了解下信安之
  • 常见的敏感文件泄漏总结

  • 信安之路内部文库第 138 篇文章,欢迎注册学习敏感文件通常指携带敏感信息的文件,最为常见的就是数据库的配置文件、网站源码备份、数据库备份等,管理员为了方便下载,将源码备份
  • 川观解读丨大熊猫迎“回国潮” 为何要回?

  • 这是2月19日在日本东京上野动物园拍摄的大熊猫“香香”。图据新华社川观新闻记者 王成栋 王培哲2月21日,旅日大熊猫后代“香香”回川。第二天,旅日大熊猫“永明”携双胞胎女儿