• JS 同源策略


    对于任何基于WEB的应用,最重要的就是安全性.JS中有各种安全检查以防止恶意脚本攻击你的机器,其中一些特定的安全手段在各种浏览器中都有采用.如:Mozilla有个完全独特的完全模型,涉及到了签署脚本和加强特权.我们要知道哪些安全手段是所有浏览器通用的,哪些是特定浏览器的.这样就能创建更安全的JS脚本.
     
    a.同源策略;
    JS只能与同一个域中的页面进行通讯.如:运行在 http://domain:port/app1/page.html;上的脚本不能和http://domain:port/app3/page.html;的浏览器窗口或iframe 进行交互.不能访问它的cookie,接收它的HTTP响应等(但它可以向任何其他源发送HTTP请求);AJAX 和 webservice 也受此策略管束.这种手段就叫同源策略;
    两个脚本被认为是同源的条件是:
     
    协议相同(比如都是http://)
    端口相同(通常都是80)
    域名相同
     
    如果这三个条件中有任何一条不满足,就不允许两个脚本进行交互.如:www.mydomain.com上的脚本不能访问video.mydomain.com上的页面 ,因为两者的域名不同,虽然后者是前者的子域.同样,它也不能访问www.mydomain.com:8080上的页面 ,因为端口不同,也不能访问about:blank 因为协议不同(后者不是http://)
     
    同源策略带来的影响:
    它影响了与BOM,DOM间的交互.如:不可以访问不同来源的任何页面的document对象,也就是说不能访问其中任何DOM结构.如:
    页面上有两个iframe 分别引用了不同源;
    alert(frames[1].location.href);
    alert(frames[1].document.location.href);//失败
    window 和 document 都有一个 location 对象的属性.如果在与框架页不同源的页面中运行这两行代码,第二行会报错.
     
    b.窗口对象问题;
    I.窗口不能在屏幕外打开,也不能小于100 x 100.如果指定了在屏幕外的坐标,窗口会自动放到屏幕中离指定位置最近的地方,同时留出足够的空间以能看到完整的窗口.
    II.如果尝试打开小于100 x 100的窗口,它会自动扩大到该大小.这样保证了用户总是能看到脚本弹出的窗口.同样,不能打开超过桌面大小的窗口.如:不能在 1024 x 768的桌面上打开1600 x 1200 的窗口;
    III.不能用close()将不是window.open()打开的窗口关闭.如果这样做,会弹出询问框问用户是否同意.
    IIII.大部分浏览器都已经内置了弹出式窗口阻拦工具.一般来说,它会将所有并非因为与用户交互而出现的弹出窗口阻拦,即:在 load 和 unload 之类的事件中打开新的窗口是不可行的.只能在 click 和 keypress 之类的事件中. 
    有些工具不管有没有交互都会阻止.我们就要进行判断:
    var oWindow = window.open("page.html",""mywindow);
    if(oWindow == null){
        alert("弹出页面已被阻止!");
    }else{
        //继续执行代码;
    }
    提示:最好在window.open()调用周围加上try...catch 块.以避免可能因为工具阻拦造成的JS错误
    注意:Windows XP Service Park2上的IE可以将站点添加到可信网站上,以突破上面的限制,因为可信站点是用https://通信的.
    某些浏览器如: Mozilla 允许用户决定脚本是否可以移动窗口或改变大小.
     
    c.资源限制
    我们有经常会关心程序是否被超过内存限制.其实这是由浏览器公司决定JS如何运行才不会影响用户的机器的.现在的情况是:浏览器在任何单个函数调用中最多运行一百万行JS代码.当超过这个数字时,IE 会弹出一个对话框,告诉你脚本使浏览器运行变慢,是否继续脚本. Mozilla 则直接跳出当前操作,并在JS控制台输出一条消息.
    注意,这里的单个调用是指一个函数,而不是当前页面JS代码
  • 相关阅读:
    express实现前后端通信上传图片,存储数据库(mysql)傻瓜教程(二)
    express实现前后端通信上传图片,存储数据库(mysql)傻瓜教程(一)
    [转载] 在阿里做了五年技术主管,我有话想说
    阿里云RDS MySql还原到本地Linux/Centos
    如何领域驱动设计?-实践感悟&总结分享
    jira + confluence 安装和破解
    RabbitMQ安装和配置
    [转]技术路线的选择重要但不具有决定性
    .Net core2.0日志组件Log4net、Nlog简单性能测试
    在微服务中使用领域事件
  • 原文地址:https://www.cnblogs.com/aiqingqing/p/4548153.html
Copyright © 2020-2023  润新知