【问题标题】:Prevent Access to Local Storage via Developer Tools?防止通过开发者工具访问本地存储?
【发布时间】:2014-12-22 17:56:25
【问题描述】:
我知道关于本地存储的evils 与good 的讨论很多。还有 Chrome hacks 用于禁用用户/访问者从控制台运行 JavaScript 的能力效果有限。
这些都没有解决我的问题:你能阻止用户在浏览器中编辑本地存储值吗?
这永远不会是当前问题的理想或永久解决方案,我只需要一种方法来做到这一点,直到我们可以重构代码库以使用 IndexedDB。
编辑:此应用的本地存储中没有处理任何敏感数据,仅对内部网络上的本地用户可用。少数用户了解到可以编辑一些数据点,而项目所有者关心的是这些用户。
【问题讨论】:
标签:
javascript
html
security
google-chrome
web
【解决方案1】:
不,你不能。即使有一个临时的“解决方案”或看似有效的破解,它仍然是网络,所以没有办法阻止对它的访问。试图阻止用户访问自己系统上的资源注定要失败。
我能想到的在浏览器内部和读写本地存储的方法:
- 在页面中注入JavaScript来读取本地存储;
- 创建自己的浏览器或浏览器插件;
- 读取
%LocalAppData%\Google\Chrome\User Data\Default\Local Storage中的SQLite数据库。
【解决方案2】:
你不能这样做。没有办法以这种方式控制用户的浏览器,而且不应该。这与互联网的本质是对立的。您的服务器发布代码。人们使用某种浏览器来使用该代码。而已。一旦提供代码,您就无法控制读取您的代码的内容或它对代码的作用。
您的安全方法是完全错误的。您无法在客户端保护它。
您可以从一开始就安全地使用 localStorage。这意味着您不能信任其中存储的任何数据,并且您不能在其中存储您不希望用户阅读的任何内容。在那里,或者在 cookie 中,或者在 IndexedDB 中,或者在 any 客户端数据存储中。安全性来自固有地不信任任何用户提交的数据。您需要验证用户发送到您的服务器的所有数据,句号。试图阻止他们更改数据是行不通的,因为他们只能编写自己的数据。他们可以产生一个请求,将 anything 发送到您的服务器。
如果您将敏感数据存储在 localStorage 或任何其他客户端数据存储中,那么您的做法是完全错误的,您需要放弃这种方法,因为它无法挽救。