SOP(Some Origin Policy)
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
非同源的限制:
- Cookie,LocalStorage 和 IndexDB 无法读取。
- DOM 无法获得。
- AJAX 请求不能发送(防止惡意網站從其他網站上讀取機密信息,同時也阻止網絡內容合法地閱讀其他網站提供的信息;防止带凭证进行非法读取(CSRF))。
js 文件跨域时,异常内容将被隐藏,只能获取到一个简单的 Script Error 信息。解决方案:
- crossorigin 属性
- 服务器上添加 Access-Control-Allow-Origin: *
data: URLs get a new, empty, security context.
在跨域访问的时候,可以自己变更域以符合同源策略,脚本可以设置 document.domain 的值为当前域的一个后缀,如果这样做的话,短(1级相对二级)的域将作为后续同源检测的依据。不能变更成长域。而且必须带端口号,否则覆盖成null。
同源策略控制了不同源之间的交互,例如在使用XMLHttpRequest 或 标签时则会受到同源策略的约束。交互通常分为三类:
- 通常允许进行跨域写操作(Cross-origin writes)(即request)。例如链接(links),重定向以及表单提交。特定少数的HTTP请求需要预请求
- 通常允许跨域资源嵌入(Cross-origin embedding)。
- 通常不允许跨域读操作(Cross-origin reads)(读response)。但常可以通过内嵌资源来巧妙的进行读取访问。例如可以读取嵌入图片的高度和宽度,调用内嵌脚本的方法,或availability of an embedded resource?
载入的任何资源。站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互。
window.name属性可以用来临时存储数据,可以跨域访问。(并且数据量可以达到2MB)
Cookies使用不同的源定义方式。一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public suffix)即可。不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains)来访问 cookie。设置cookie时,你可以使用Domain,Path,Secure,和Http-Only标记来限定其访问性。读取cookie时,不 会知晓它的出处。尽管使用安全的https连接,任何可见的cookie都是使用不安全的连接设置的。