安全街
一步步,我们的信息安全时代

同源策略(SOP)是浏览器最核心最基本的安全策略。

基础概念

同源是指协议、域名、端口相同,非同源的资源不能互相读写。
如果没有同源策略,Web世界可能就毫无隐私可言。比如正在淘宝购物时打开了一个恶意网页,恶意网页就能跨域读写淘宝页所有的数据。这样是非常危险的。

跨域的几种方式

  • 1.通过使用带有src属性的标签
    在浏览器中,诸如<script><img><link><iframe>等标签是可以跨域加载资源的。
  • 2.使用JSONP
    JSONP的要点就是客户端定义一个callback参数传递给服务端,然后服务端返回由这个参数作为函数名包裹的JSON数据,以便客户端对应的函数处理。
  • 3.document.domain跨子域
    假如有两个域名www.test.coma.b.test.com,这两个域名是不同源的。若想跨域互相访问,可以将两者的document,.domain设置为test.com注意:这种跨域方式是有限制的:

    • 主域必须相同。不管前面是什么,后面都必须是一个test.com,不能整一个baidu.com出来。
    • document.domain只能设为同级或更高级的。
  • 4.利用window.name通信
    同一个窗口下不同页面的window.name都是同一个。我们可以通过在页面中动态创建目标域的iframe,将window.name当做一个公共变量来进行不同页面之间的通信,以达到跨域的目的。在跨域完成后,我们再销毁这个iframe就可以了。window.name最大可达到2M左右,对于一般的通信来说还是足够使用的。
  • 5.H5新引进的window.postMessage
    此为H5的新方法,具体用法为要跨域的Window对象.postMessage(消息, 限定要跨的域(也可使用通配符*))。消息接收方可以通过onmessage事件监听到传过来的消息,完成跨域。
  • 6.通过代理的方式
    我们可以通过在后端通过接口来传输调用数据,再返回给前端。由于不是通过浏览器直接访问不同源资源,也就不存在跨域的问题。
  • 7.XHR 2
    在服务器端写入以下代码即代表接受跨域访问:

    header('Access-Control-Allow-Origin:*'); 
    header('Access-Control-Allow-Methods:POST,GET');
    

*本文为原创,作者T1dDl3R,首发于本博客。转载请注明

这篇文章还没有人发言,快抢第一!

发表评论