Cookie、Session、LocalStorage 与 SessionStorage的区别
localStorage 和 sessionStorage属于H5新特性
localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
特性 | Cookie | Session | localStorage | sessionStorage |
---|---|---|---|---|
大小 | < 4KB | 大小没有限制 | < 5M | < 5M |
有效期 | 一般由服务器生成,可设置失效时间(保存在硬盘中);如果在浏览器端生成Cookie,默认是关闭浏览器后失效(保存在内存中) | 第一列文本居中 | 永久有效(除非主动删除数据) | 仅在当前回话、当前页面有效;窗口或标签页关闭后清除 |
安全性 | XSS跨站脚本攻击 | 安全性更高 | ||
存储内容 | 只能保存字符串类型,以文本的方式 | 可含有多个对象 | 复杂对象用JSON对象的stringify和parse来处理 | |
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | ||
主要用途 | 保存登录信息 | 搜索历史记录保存 |
Cookie、localStorage 和 sessionStorage容易造成XSS跨站脚本攻击
XSS跨站脚本攻击方式
因为只要打开控制台,你就随意修改它们的值,如果你的网站中有 XSS 的风险,千万不要用它们存储你系统中的敏感数据(例如:账号、密码、邮箱)。
1、盗用cookie,获取敏感信息。
2、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
XSS攻击主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,当然安全的软件开发流程及其他一些编程安全原则也可以大大减少XSS安全漏洞的发生。这些防范XSS漏洞原则包括:
(1)不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来。
(2)实现Session 标记(session tokens)、CAPTCHA(验证码)系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
(3)cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等;通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。
(4)确认接收的内容被妥善地规范化,仅包含最小的、安全的Tag(没有JavaScript),去掉任何对远程内容的引用(尤其是样式表和JavaScript),使用HTTPonly的cookie。