为什麽要有同源政策?
可以先想想没有同源政策会发生什麽事?
当你在看这篇文章时,可以看看你的浏览器开了多少分页,可能开了 gmail 信箱的页面,脸书,无数部落格等等,这时候这些网站间便可以读取其他网站的资讯,如果这时候某个网页要读取你个人信箱的私人讯息也是可以的,这时你可能会想,这样许多私人的资讯不就会被窃取吗?
没错,正是为了避免恶意的脚本透过 DOM 存取资料,同源政策规定了只有来源相同的文件可以彼此存取资源。
我们先来看看访问一个网页时一定会需要的网址,一个网址可以大致分成四个部分:
http://www.example.com/dir/page.html
只要前三个相同就算是同源,以下可以比较一下哪些网址和上述的网址同源
图片来源:维基百科
虽然同源的网站才能彼此存取资料,但不代表完全禁止跨来源存取资料,这是很大的一个迷思。MDN 提到两个允许的特定情况:
<video>
,<audio>
嵌入的影音媒体@font-face
的字型(部分浏览器不允许)iframes
(如果 X-Frame-Options 的设定是 sameorigin 或 deny 则不允许嵌入)script
(对於特定的API存取可能会被禁止)由於不是所有网站都带有恶意程序,加上网页间有时必须取用第三方资源,所以有两种方式可以让网页存取不同来源的资源:
Access-Control-Allow-Origin
为发送请求的网址
或*
,即可取得其他来源的资源至於跨域请求会发生的错误以及 CORS 的详细做法,就待之後再理解了~
参考资料:
MDN
Same-origin policy
>>: 追求JS小姊姊系列 Day21 -- 工具人、姐妹不只身份的差别(上): 基本型别包裹器(wrapper object)
Cloud Run 是这次要介绍的最後一种部属服务方式。它是一种基於 Container 的 Ser...
渗透测试简介 今天来跟各位介绍一下,什麽是渗透测试。渗透测试(Penetration Test),简...
报告班长,图片截自网路 大家有听过「报告班长」吗?这部 1987 年的电影,当年推出後一炮而红,带...
在专案过程中,透过 GitLab CI 建立流水线,让研发过程中如编译、测试、打包、部署等工作都得以...
有一阵子流行的宝可梦Go的App寻宝游戏, 吸引不少粉丝信徒的膜拜, 玩家们都希望自己手上的宝可梦能...