【问题标题】:Can browser extensions keylog user input?浏览器扩展可以键盘记录用户输入吗?
【发布时间】:2017-05-31 09:43:41
【问题描述】:

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

我的问题是:

  1. 有没有办法从网页禁用扩展程序?
  2. 有没有办法阻止扩展程序访问页面上的localStorage
  3. 还有其他更安全的方法来处理我想做的事情吗?

【问题讨论】:

  • 网页和客户端网络应用程序没有防御能力,但您可以自己编写扩展程序并在里面做所有敏感的事情。
  • 最终,您可能不想对用户决定下载和运行哪些扩展程序承担全部责任。您始终可以建议不安装扩展程序,在运行您的应用程序时禁用扩展程序,或者确实使用不带扩展程序的单独安装。

标签: javascript html security encryption google-chrome-extension


【解决方案1】:
  1. 没有。
  2. 如果用户允许扩展访问,则不会。
  3. 可能,见下文。

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多