1.浏览器安全的基石是“同源政策”,协议相同,域名相同和端口相同时才满足同源。
2.同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
3.非同源,共有三种行为受到限制:
*无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB。
*无法接触非同源网页的 DOM。
*可以向非同源地址发送 AJAX 请求,但浏览器会拒绝接受响应。
4.如果两个网页一级域名相同,只是次级域名不同,浏览器允许通过设置`document.domain`共享 Cookie,必须把需要共享的次级域名都设置document.domain。
5.什么是跨域?
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
广义的跨域:
1、资源跳转:A链接、重定向、form提交表单
2、资源嵌入: <link>、<script>、<img>、<iframe>等dom标签,还有样式中background:url()、@font-face()等文件外链
3、脚本请求: js发起的ajax请求、dom和js对象的跨域操作等
其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景:
cors,websocket,postmessage,代理,jsonp等,详见链接:https://github.com/menglei0602/cross-domain.git
备注:
1).如果是协议和端口造成的跨域问题“前台”是无能为力的。
2).在跨域问题上,仅仅是通过“URL 的首部”来识别而不会根据域名对应的 IP 地址是否相同来判断。“URL 的首部”可以理解为“协议, 域名和端口必须匹配”。
3).跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会?因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。同时也说明了跨域并不能完全阻止 CSRF,因为请求毕竟是发出去了。
4).跨域相关优秀文章:
*https://segmentfault.com/a/1190000012469713
网友评论