zoukankan      html  css  js  c++  java
  • 开扒本地存储—localStorage

    .localStorage是什么狂点查看demo



    localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期

    的。

    2.localStorage有哪些优点

    1). 存储空间

    存储空间 更大:IE8下每个独立的存储空间为10M,其他浏览器实现略有不同,但都比

    Cookie要大很多。

    2). 服务器

    存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一并发送的

    服务器,这对于本地存储的数据是一种带宽浪费。而Web Storage中的数据则仅仅是存

    在本地,不会与服务器发生任何交互。

     

    3).接口

     

    更多丰富易用的接口:Web Storage提供了一套更为丰富的接口,使得数据操作更为简

     

    便。

     

    4). 存储空间

     

    独立的存储空间:每个域(包括子域)有独立的存储空间,各个存储空间是完全独立

     

    的,因此不会造成数据混乱。当把当前网页或者浏览器关掉并再进入时,localStorage

     

    中的数据还是存在的。那么,这个数据是存在什么地方的呢?

     

    查找后发现对于Chrome Browser, 其缺省存在以下地址:C:/Documents and Settings/UserName/Local Settings/Application Data/Google/Chrome/User Data/Default/Local Storage

     

    3.适用浏览器

     

    Chrome4+ 开始支持localStorage
    Firefox3.5+开始支持localStorage
    Firefox1.5+支持globalStorage
    IE8+支持localStorage
    IE7兼容模式支持localStorage
    IE5.5+支持userdata
    Safari 4+ 支持localStorage
    Opera10.5+支持localStorage
    Netscape Navigator最后一版(9.0.0.6)支持localStorage,其余版本未测

     

    现在主流的浏览器除ie6,ie7外都支持localstorage,可以支持的用localstorage,不支

     

    持的用cookie代替(但不建议这么做)

     

    4.判断适用浏览器

     
    function getLocalStorage() {    
             try {    
                 if( !! window.localStorage ) return window.localStorage;    
             } catch(e) {    
                 return undefined;    
             }    
         } 
    

      

    5.localStorage的用法

    localStorage. length:返回现在已经存储的变量数目。


    localStorage. key(n):返回第n个变量的键值(key)。


    localStorage.getItem(k):和localStorage.k一样,取得键值为k的变量的值。


    localStorage.setItem(k , v):和localStorage.k = v一样,设置键值k的变量值。


    localStorage.removeItem(k):删除键值为k的变量。


    localStorage.clear():清空所有变量。

    6.IE6-7解决方案

     
    if(!window.localStorage && /MSIE/.test(navigator.userAgent)){  
        if(!window.UserData) {  
            window.UserData = function(file_name) {  
                if(!file_name) file_name="user_data_default";  
                var dom = document.createElement('input');  
                dom.type = "hidden";  
                dom.addBehavior ("#default#userData");  
                document.body.appendChild(dom);  
                dom.save(file_name);  
                this.file_name = file_name;  
                this.dom = dom;  
                return this;  
            };  
            window.UserData.prototype = {  
                setItem:function(k, v) {  
                    this.dom.setAttribute(k,v);  
                    this.dom.save(this.file_name);  
                },  
                getItem:function(k){  
                    this.dom.load(this.file_name);  
                    return this.dom.getAttribute(k);  
                },  
                removeItem:function(k){  
                    this.dom.removeAttribute(k);  
                    this.dom.save(this.file_name);  
                },  
                clear:function() {  
                   this.dom.load(this.file_name);  
                   var now = new Date();  
                   now = new Date(now.getTime()-1);  
                   this.dom.expires = now.toUTCString();  
                   this.dom.save(this.file_name);  
                }  
            };  
        }  
        window.localStorage = new window.UserData("local_storage");  
    }  
    

      

    不支持原生localStorage 所有方法,只支持4中扩展出来的自定义方法



    7.本地存储安全

    (1)、不要存储敏感信息;

    (2)、严格过滤输入输出

    对于本地存储,为了方便再次加载数据,常常会把数据存储在本地。等再此加载的时

    候,直接从本地读取数据显示在网页上。在某些情况下,在通过在 localStorage存储中

    写入或读取数据的时候,如果数据没有经过输入输出严格过滤,那么极易可能这些数据

    被作为HTML代码进行解析,从而产生 XSS攻击。

    Twitter就发生过localStorage XSS漏洞。次漏洞触发的条件是,在Twitter的个人主页

    上执行以下存储代码后,每次再打开个人主页时就会弹出/xss/框。

     

     
    localStorage.setItem(“:USER:”,’{“name”:{“value”:{“store”:{“recentFollowers”:{“value”:”name<script>alert(/xss/)</script>”}}}}}’);
    

      从这段代码可以看出,Twitter会使用localStorage方法把一些个人数据存储到本地,每

    次加载个人主页面的时候就会从本地存储取数据,然后由于Twitter忽略了对去除数据的

    严格过滤导致存储的代码会被当作HMTL编码执行,进而发生跨站攻击。

    Twitter localStorage XSS 漏洞详细信息可以查看:

    http://www.wooyun.org/bugs/ wooyun-2010-03075。虽然Twitter这个漏洞利

    用起来非常困难,但它再一次告诉我们本着一切输入输出都是有害的原则,要对数据进

    行严 格的输入输出过滤。

    (3)、容易遭受跨目录攻击

    localStroage存储方式不会像Cookie存储一样可以指定域中的路径,在localStroage存

    储方式中没有域路径的概念。也就是说,如果一个域下的任意路径存在XSS漏洞,整个

    域下存储的数据,在知道存储名称的情况下,都可以被获取到。

    假设下面两个链接是使用localStorage来存储数据:

    http://h.example.com/xisigr

    http://h.example.com/xhack

     

    用户xisigr和xhack各自的blog链接虽然属于同一个域,但却有不同的路径,一个路径为

     

    xisigr,另一个路径为xhack。假设 xisigr用户发现自己的路径下存在存储型XSS漏


    洞,那么就可以在自己的blog中加入获取数据代码,其中核心代码为


    localStorage.getItem(“name”)。xhack用户并不需要登录blog,他只要访问


    http://h.example.com /xisigr,本地存储数据就会被获取到。


    (5)、容易遭受DNS欺骗攻击


    Google在没有使用HTML5本地存储前,是使用Google Gears方式来进行本地存储的,


    那个时候Google Gears就遭到过DNS欺骗攻击。Google Gears支持离线存储,可以把


    Gmail,WordPresss这样网站数据的以SQLite数据库的形式存储下来,以后用户就可以


    对存储的网站数据进 行离线读取或删除操作。如果攻击者发动DNS欺骗攻击,那么就可


    以注入本地数据库,获取数据或者留下永久的后门。这样将会造成对用户持久的危害。


    Google Gears所遭受的DNS欺骗攻击方式在HTML5本地存储上也是同样有效的。

  • 相关阅读:
    用Vue创建一个新的项目
    事件循环学习2
    事件循环学习笔记
    关于访问器属性
    bootstrap-datetimepicker时间控件
    前端的指导方针---css篇
    web移动端小tip,box-flex
    数组常用的几种方法
    ajax对一些没有接口的数据进行分析和添加方法
    JAVA静态代理和动态代理理解
  • 原文地址:https://www.cnblogs.com/xupeiyu/p/4447244.html
Copyright © 2011-2022 走看看