同源策略是什么
同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以xyz.com
下的js
脚本采用ajax
读取abc.com
里面的文件数据是会被拒绝的。
同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
目的
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?
很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
由此可见,”同源政策”是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。
同源的定义
如果两个页面的协议
,主机
和端口
(如果有指定)都相同,则两个页面具有相同的源。我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“tuple”. (“tuple” ,“元”,是指一些事物组合在一起形成一个整体,比如(1,2)叫二元,(1,2,3)叫三元)
下表给出了相对http://store.company.com/dir/page.html
同源检测的示例:
URL 组成
{protocol}://{host}:{port}/{filePath}?{query(key=value&key2=value2)}#{fragment}
URL |
结果 |
原因 |
http://store.company.com/dir2/other.html |
成功 |
只有路径不同 |
http://store.company.com/dir/inner/another.html |
成功 |
只有路径不同 |
https://store.company.com/secure.html |
失败 |
不同协议 ( https和http ) |
http://store.company.com:81/dir/etc.html |
失败 |
不同端口 ( http:// 80是默认的) |
http://news.company.com/dir/other.html |
失败 |
不同域名 ( news和store ) |
另请参见文件的源定义: URLs.
参考 & 引用
https://www.cnblogs.com/rain-chenwei/p/9520240.html
https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
https://blog.csdn.net/shuai_wy/article/details/51186956
http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html