当前位置: 首页 > 面试题库 >

是否可以将本地存储视为安全的?

柴华灿
2023-03-14
问题内容

我需要开发一个可长期离线运行的Web应用程序。为了使它可行,我无法避免将敏感数据(个人数据,而不是您将仅存储散列数据的类型)保存在本地存储中。

我接受不建议这样做,但是我几乎没有选择要执行以下操作来保护数据:

  • 使用斯坦福JavaScript加密库和AES-256将所有内容都加密到本地存储中
  • 用户密码是加密密钥,未存储在设备上
  • 通过ssl从单个受信任的服务器提供所有内容(在线时)
  • 使用owasp antisamy项目验证往返服务器本地存储的所有数据
  • 在appcache的网络部分中,不使用*,而是仅列出与受信任服务器连接所需的URI
  • 通常,尝试应用OWASP XSS备忘单中建议的指南

我很欣赏魔鬼在细节上的细节,并且知道人们对本地存储和基于JavaScript的安全性普遍持怀疑态度。任何人都可以评论是否存在:

  • 上述方法的根本缺陷?
  • 有什么办法可以解决此类缺陷?
  • html 5应用程序必须长时间离线运行时,还有什么更好的方法来保护本地存储?

谢谢你的帮助。


问题答案:

Web加密

客户端(浏览器)javascript中的加密问题将在下面详细介绍。除了所有这些关注点之外,所有关注点均不适用于WebCryptoAPI,该API现在得到了很好的支持。

对于脱机应用程序,您仍然必须设计和实现安全的密钥库。

另外:如果您使用的是Node.js,请使用内置的加密 API。

本机Java加密(WebCrypto之前的版本)

我认为主要的关注点是对计算机具有物理访问权限的人正在阅读localStorage您网站的,而您希望通过加密来防止这种访问。

如果某人具有物理访问权限,那么您也很容易遭受其他攻击,这比读书更糟。这些包括(但不限于):键盘记录器,脱机脚本修改,本地脚本注入,浏览器缓存中毒和DNS重定向。仅当用户在计算机受到威胁后使用计算机时,这些攻击才起作用。但是,在这种情况下进行物理访问意味着您会遇到更大的问题。

因此请记住,如果机器被盗,则本地加密很有价值的局限性场景是。

有些库确实实现了所需的功能,例如StanfordJavascriptCryptoLibrary。但是,存在一些固有的弱点(如@ircmaxell的答案的链接所述):

  1. 缺乏熵/随机数生成;
  2. 缺少安全的密钥库,即如果私钥存储在本地或存储在服务器上(禁止离线访问),则必须对其进行密码保护;
  3. 缺乏安全擦除;
  4. 缺乏时序特征。

这些弱点中的每一个都对应于一类密码妥协。换句话说,尽管您可能拥有“ crypto”的名字,但它远低于人们在实践中所追求的严格性。

综上所述,精算评估不如“
Javascript加密功能弱,不要使用它”那么简单。这不是背书,严格地是警告,它要求您完全了解上述弱点的风险,所面临媒介的频率和成本以及在发生故障时的缓解或保险能力:Javascript
crypto,in尽管它有弱点,但可能会减少您的接触风险,但只能针对技术能力有限的小偷。但是,您应该假定Java加密对于以该信息为目标的坚定而有能力的攻击者没有价值。当已知实现中固有的许多弱点时,有些人会认为将数据称为“加密”是一种误导。换一种说法,您可以略微减少技术风险,但可以通过披露增加财务风险。当然,每种情况都是不同的-
减少将技术风险暴露于财务风险的分析并非易事。这是一个说明性的类比:尽管存在固有风险,但某些银行仍要求使用弱密码,因为它们所遭受的弱密码损失要小于支持强密码的最终用户成本。


如果您阅读了最后一段,并认为“互联网上某个叫Brian的人说我可以使用Java加密技术”, 请不要使用Java加密技术。

对于问题中描述的用例,用户加密本地分区或主目录并使用强密码似乎更有意义。这种类型的安全性通常经过良好测试,广泛信任并且普遍可用。



 类似资料:
  • 我目前正在使用ReactJS构建一个单页应用程序。 我读到不使用的原因之一是因为XSS漏洞。 由于 React 会转义所有用户输入,现在使用 是否安全?

  • 阅读文档时,并不十分清楚。 我想要的是能够存储和检索简单的json文档。使用CloudSearch,似乎可以以SDF格式存储文档,然后搜索它们,但它只返回文档ID和指定字段的一小部分(我认为是200个字符)。 有没有一种方法来检索完整的文档ID只是使用CloudSearch?还是打算作为搜索和使用主存储服务的附加工具?

  • 本文我们将看看应用在本地存储数据有哪些方法以及这些不同方法的安全性。 我们将会在一个demo上这些这些测试,你可以从github上下载这个例子程序。对于CoreData的例子,你可以从这下载例子程序。本例有一个不同点就是我们将会在模拟器上运行这些应用,而不是在设备上运行。这样做的目的是为了证明在前面文章中的操作都可以通过Xcode来把这些应用运行在模拟器上。当然,你也可以把这应用安装到设备上。 N

  • 问题内容: 我目前正在使用reactjs构建一个单页面应用程序。我读到许多不使用localStorage的原因是由于XSS漏洞。由于React避开了所有用户输入,现在使用localStorage是否安全? 问题答案: 在大多数现代单页应用程序中,我们确实必须将令牌存储在客户端的某个位置(最常见的用例-在页面刷新后使用户保持登录状态)。 共有2个可用选项:Web存储(会话存储,本地存储)和客户端co

  • 问题内容: MySQL是否可以在正常的select语句中直接将存储的UTC时间转换为本地时区:ed时间? 假设您有一些带有时间戳(UTC)的数据。 那当我 我当然会以存储的UTC形式获取所有日期。 但是,假设我想将它们放在另一个时区(带DST),然后可以向选择查询添加一些魔术,以便将所有日期恢复为所选时区吗? 还是我必须在顶层的其他层(例如某些php代码)中执行此操作?(这似乎是大多数人解决此问题

  • 我有一个基于AWS的web应用程序。客户端使用Angular 1.5.3用JavaScript编写 null 我已经找到了这篇教程:http://docs.aws.amazon.com/amazoncloudfront/latest/developerguide/tutorialstreamingjwplayer.html,但不幸的是,这篇教程没有多大用处,因为它描述了如何从公共bucket进行流