浏览器扩展程序可以对用户输入进行键盘记录吗?



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

我的问题是:

  1. 有没有办法从网页禁用扩展?
  2. 有没有办法防止扩展程序访问页面上的localStorage
  3. 对于我想做的事情,有没有另一种更安全的方法?
  1. No.
  2. 如果用户允许扩展程序访问,则不会。
  3. 可能,见下文。

我认为这种方法存在多个问题。

如@wOxxOm所述,客户端内容完全由浏览器控制(在这种情况下),浏览器设置由最终用户(或应用于客户端计算机的策略)控制。您可以想到做的一件事是让您的应用程序在私人/隐身模式下运行,因为这默认情况下会禁用扩展程序,但即便如此,用户也可以允许隐身模式的扩展程序,并且由于下述原因,无论如何都不会有太大帮助(除此之外,您无法可靠地检测用户是否正在使用私人/隐身模式, 所以无论如何,这必须只是一个建议)。

我的第二点也已经被@MaartenBodewes评论了。选择扩展(并授予它们权限)是用户的责任。如果他非常信任一个扩展程序,以至于他将其添加到浏览器中,那么最终他的风险。您可以对此发出警告,但决定应始终由用户决定。

我最重要的一点是,这无论如何都无济于事。正如一些人已经指出的那样,Javascript中的密码学曾经是没有希望的。如果您针对较旧的浏览器,这确实是一个坏主意。新的浏览器带来了重大改进(请参阅此处接受的答案),Content-Security-Policy和新的加密API都很好(尽管在浏览器和版本中没有得到很好的支持)。

但是,您的应用程序中总可能存在缺陷,这些缺陷会否定所有安全工作。跨站点脚本的单个实例将使您无法抵御此类威胁。如果您非常关心安全性,以至于希望用户不使用他们认为可以的扩展,那么您也应该同样关注此类风险。

简而言之,我认为如果恶意浏览器扩展是您的威胁模型中的主要威胁,那么不幸的是,Web 可能不是您的应用程序的好平台。另一方面,编写类似本机应用程序的东西有其自身的威胁,与 Web 应用程序非常不同,因此决定权在您手中。无论您做什么,总会有剩余的风险,您必须以某种方式接受或转移。

最新更新