使用浏览器的 Local Storage 真的安全吗?-阿里云开发者社区

开发者社区> -技术小能手-> 正文

使用浏览器的 Local Storage 真的安全吗?

简介: 使用浏览器的 Local Storage 真的安全吗?
+关注继续查看

LocalStorage 是一个 HTML5 网络存储对象,用于将数据存储在客户端——即本地,在用户的计算机上。 本地存储的数据没有到期日期,并且会一直存在,直到被删除。 (相比之下,会话存储是另一个 HTML5 网络存储 API,它会在浏览器关闭时删除存储的数据。)


本地存储是纯 JavaScript。 同样,虽然它仍然在用户的设备上生成纯文本文档,但本地存储也允许存储多达 5MB 的数据(与 4KB 的 cookie 相比)。 这使得本地存储的许多有趣应用成为可能,例如管理内容以减少从服务器请求内容的需要,加快加载时间。


只读的localStorage 属性允许你访问一个Document 源(origin)的对象 Storage;存储的数据将保存在浏览器会话中。localStorage 类似 sessionStorage,但其区别在于:存储在 localStorage 的数据可以长期保留;而当页面会话结束——也就是说,当页面被关闭时,存储在 sessionStorage 的数据会被清除 。


localStorage 最主要的特点是:


在同源的所有标签页和窗口之间共享数据。

数据不会过期。它在浏览器重启甚至系统重启后仍然存在。

sessionStorage 对象的使用频率比 localStorage 对象低得多。


属性和方法是相同的,但是它有更多的限制:


sessionStorage 的数据只存在于当前浏览器标签页。

具有相同页面的另一个标签页中将会有不同的存储。

但是,它在同一标签页下的 iframe 之间是共享的(假如它们来自相同的源)。

数据在页面刷新后仍然保留,但在关闭/重新打开浏览器标签页后不会被保留。

使用 local storage 的一个例子:


创建一个 textarea 字段,每当其值发生变化时,可以将其“自动保存”。


因此,如果用户不小心关闭了页面,然后重新打开,他会发现之前未完成的输入仍然保留在那里。

像这样:

image.pngimage.pngimage.png

如果使用得当,本地存储可以成为功能强大的轻量级数据存储解决方案,但并非没有问题。 以下是使用本地存储可能不是一个好主意的几个原因,具体取决于存储的内容。


Why using LocalStorage might be a bad idea

本地存储本质上并不比使用 cookie 更安全。理解了这一点后,该对象可用于存储从安全角度来看无关紧要的数据。但是,以下是重新考虑使用本地存储的几个原因。


1. 如果一个站点容易受到 XSS 攻击,LocalStorage 是不安全的

也许对使用本地存储的最大反对是与之相关的安全漏洞。本地存储具有许多与 cookie 相同的特征,包括相同的安全风险。其中之一是对跨站点脚本的易感性,它会窃取 cookie,让黑客伪装成具有站点登录会话的用户。将诸如密码之类的敏感内容存储在本地存储文件中实际上可以简化黑客的过程,因为他们不需要将 cookie 加载到自己的浏览器中。


2. 开发者无法控制本地存储的数据

使用本地存储,没有服务器端存储——没有开发人员可以控制的数据库。由于一些原因,这可能会出现问题,其中之一是开发人员无法在存储代码或信息后对其进行更新。用户需要手动删除文件,这需要首先找到它。或者,他们需要擦除浏览器缓存,从而丢失所有存储的数据。


3.用户清除其缓存

定期清除浏览器缓存有助于 cookie 更有效地发挥作用,这通常是人们在解决浏览器问题(如页面加载不正确)时采取的第一步。


当使用本地存储来支持站点的功能时,这是一个问题。如果用户清除浏览器缓存,该信息将永久丢失。这使得本地存储作为备用数据库更有用。


LocalStorage 的替代方案

根据信息是否敏感,确实存在一些本地存储的替代方案。不想使用本地存储的开发人员可以尝试下列这些方式:


对敏感信息使用服务器端会话

当涉及到敏感信息时,将数据存储在服务器上有几个优点。首先,开发人员可以保证其安全性,并且对单个会话有更多的控制权(如有必要,它们可以立即终止)。其次,数据在架构内受到保护,暴露的机会更少。


对于非敏感信息,选择 IndexedDB

对于一心使用客户端会话的开发人员,IndexedDB 使开发人员能够构建可以本地存储的应用程序。尽管它没有像本地存储那样广泛的浏览器支持,但它对于本地存储非敏感数据仍然很有用。 IndexedDB 与本地存储相比有一个主要优势,因为它是一个成熟的数据库,能够处理更多类型的数据。


明智地处理数据存储

如果精心部署,本地存储可以提高站点性能并帮助创建更多轻量级应用程序。 但是,绝不能将本地存储用于敏感信息,例如密码或个人信息。 这样做会产生安全风险。


对于需要加密和安全的信息,还有其他有效且方便的解决方案,例如服务器端会话。 由于网络安全是一个如此重要的问题,因此没有必要冒险。 因此,在使用 LocalStorage 时,请慎之又慎。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
计算机基础2 | 学习笔记
快速学习计算机基础2。
12 0
计算机基础1 | 学习笔记
快速学习计算机基础1。
9 0
计算机基础3 | 学习笔记
快速学习计算机基础3。
11 0
对ECS服务器的初认知
经过对ECS服务器的基本认识,掌握基础的操作方法,并对下一步的学习方向有了系统的规划。
19 0
冬季实战营第一期:从零到一上手玩转云服务器
一、1月17日 动手实战-初识上云基础,动手实操ECS云服务器新手上路 这个实验我就不多说了,就是熟悉控制台,没啥,搜索需要的服务等,真没啥好说的
12 0
冬季实战营第一期学习报告
通过五天学习与实操,对ECS云服务器入门、快速搭建LAMP环境、部署MySQL数据库、回顾搭建Docker环境和Spring Boot以及使用PolarDB和ECS搭建门户网站操作,对本期学习与实操的认识。
9 0
Java classloader详解
Java程序并不是一个可执行文件,而是由很多的Java类组成,其运行是由JVM来控制的。而JVM从内存中查找到类,而真正将类加载进内存的就是ClassLoader,可以说我们每天都在接触ClassLoader,但是很多时候我们没有明白其执行的流程和原理。
8 0
Redis高可用架构演进
Redis是目前使用最广泛的缓存程序之一,也被应用于多种场景,例如数据缓存、分布式锁等,Redis官方提供了多种部署架构,以满足不同应用场景下对于高可用和扩展性的要求。
9 0
MySQL高可用架构演进
MySQL是数据库领域当之无愧的霸主之一,其在各行各业被广泛应用,随着广泛使用,对于MySQL本身的高可用性的要求就是不可避免的话题,而MySQL的高可用方案也随着MySQL功能的完善经历了多次升级,本文将对MySQL的各种高可用架构进行分析,以此来了解架构的演进。
11 0
系统安装前准备 | 学习笔记
快速学习系统安装前准备。
7 0
1727
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载