0

我正在开发一个应用程序,用于加密和存储敏感用户数据localStorage。加密/解密密码不保存在任何地方。所以,如果用户丢失密码,则无法解密数据。 据我所知,浏览器扩展可以在任何页面上访问localStorage,并且可以从页面上的任何元素(例如input)收听事件。这是问题所在,因为恶意扩展可以键入用户密码,从localStorage获取加密数据并使用密码对其进行解密。浏览器扩展可以键盘输入用户吗?

我的问题是:

  1. 有没有办法从网页禁用扩展?
  2. 有没有办法阻止扩展访问页面上的localStorage
  3. 有没有更安全的方法来做我想做的事情?
+2

网页和客户端网页应用程序没有防御能力,但您可以自己编写扩展程序,并执行所有敏感内容。 – wOxxOm

+3

最终,您可能不想对用户决定下载并运行哪些扩展模块负全部责任。您可以随时*推荐*不安装扩展程序,在运行应用程序时禁用扩展程序,或确实使用不带扩展程序的单独安装程序。 –

回答

2
  1. 若用户所允许的扩展访问。
  2. 也许,请参见下文。

我觉得这种方法有很多问题。

正如@wOxxOm所指出的那样,客户端事物完全在浏览器的控制下(在这种情况下),并且浏览器设置由最终用户(或应用于客户端计算机的策略)管理。你可以想到的一件事是让你的应用程序以隐私/隐身模式运行,因为默认情况下会禁用扩展程序,但即使此时用户也可以允许扩展程序进入隐身模式,并且由于下面描述的原因,除此之外,您无法可靠地检测到用户是否正在使用私人/无痕模式,因此无论如何这只是一个推荐)。

我的第二点也已被@MaartenBodewes评论。选择扩展(并授予他们特权)是您用户的责任。如果他非常信任扩展名并将其添加到他的浏览器中,那最终是他的风险。你可以警告这一点,但决定总是应该与用户一起坐。

而我最重要的一点是,这无济于事。正如somepeople已经指出的那样,Javascript中的加密技术曾经是绝望的。如果您的目标是旧版浏览器,那么这真是一个糟糕的主意。新浏览器带来了重大改进(请参阅接受的答案here),Content-Security-Policy和新的加密API都很好(虽然浏览器和版本支持不佳)。

但是,在您的应用程序中总会存在一些缺陷,否定所有安全措施。一个跨站点脚本实例将使您无法抵御这些威胁。如果您对安全性如此担忧,以至于您希望用户不使用他们认为没问题的扩展程序,那么您也应该同样关注类似的风险。

简而言之,我认为如果恶意浏览器扩展是威胁模型中的主要威胁,那么很遗憾,Web可能不是您的应用程序的良好平台。另一方面,编写类似本地应用程序的东西有其自身的威胁,与网络应用程序截然不同,因此决定权归您所有。无论你做什么,总会有剩余的风险,你将不得不接受或以某种方式转移。

+0

谢谢,先生!现在一切都更清晰了! –

相关问题