如何检查Chrome扩展程序的真实性?

fse*_*art 14 javascript security google-chrome google-chrome-extension

上下文:

  • 您有一个网络服务器,只有在您的客户安装了特定的Chrome扩展程序时,才能提供独家内容.
  • 您有两种方式可以提供Chrome扩展程序包:
    1. 来自Chrome网上应用店
    2. 从您自己的服务器

问题:

  • 有许多解决方案可以让我们知道安装了Chrome扩展程序:
    1. 使用内容脚本加载网页时插入元素.
    2. 使用Web请求将特定标头发送到服务器.
    3. 等等.
  • 但似乎没有办法检查与您的网页互动的Chrome扩展程序是否为正版.
  • 实际上,由于任何想要查看和复制Chrome扩展程序的源代码,似乎无法知道当前与您的网页交互的Chrome扩展程序是您发布的还是克隆版本(另一个人可能会有所改变.
  • 您似乎只能知道某些Chrome扩展程序以"预期方式"与您的网页进行交互,但您无法验证其真实性.

解决方案?

  • 一种解决方案可能包括使用Chrome扩展程序包中包含的信息,并且其他任何人都无法更改或复制这些信息:
    1. 将Chrome扩展程序的ID发送到服务器?但是怎么样?
      • 该ID必须由您和您的JavaScript代码发送,似乎没有办法使用"内部"Chrome功能.
      • 因此,如果其他人只是将相同的ID发送到您的服务器(某种Chrome扩展程序的ID欺骗),那么您的服务器会认为他的Chrome扩展程序是真正的!
    2. 使用打包应用程序时提供的私钥?但是怎么样?
      • 似乎无法以编程方式以任何方式访问或使用此密钥!
  • 另一个解决方案是我使用NPAPI插件和嵌入认证方法,如GPG等.但这个解决方案不可取,主要是因为其API文档的大"警告"部分.
  • 还有其他解决方案吗?

笔记

此问题试图在Chrome扩展程序的API中引发真正的安全问题:如何在与您的服务进行交互时检查Chrome扩展程序的真实性.如果有任何遗漏的可能性或任何误解,请随时在评论中提问我.

Dea*_*ady 7

我很遗憾地说,但由于一个简单的问题,你提出的这个问题实质上是无法解决的:你无法信任客户.由于客户端可以看到代码,因此您无法解决问题.

来自客户端的任何信息都可以通过其他方式复制.这与试图证明当用户登录他们的帐户实际上是用户而不是其他人发现或获得他们的用户名和密码时基本上是同一个问题.

互联网安全模型围绕2个试图进行通信的各方建立,而第三方无法模仿,修改或收听对话.在不隐藏扩展的源代码的情况下,客户端变得与第三方无法区分(副本中的文件 - 无法确定哪个是哪个).

如果源代码被隐藏,它就变成了另一个故事.现在,用户或恶意方无法访问真实客户端所知道的秘密,并且所有常规安全模型都适用.但是,Chrome会在扩展中允许隐藏源代码是值得怀疑的,因为它会产生其他安全问题.

如您所述,某些源代码可以使用NPAPI插件隐藏,但它已经提供了您已经知道的价格.


回到目前的状态:

现在它变成了交互意味着什么的问题.

如果交互意味着,当用户在页面上,你想知道这是否是您的分机或其他一些,那么你可以得到最接近的是列出你的页面下表现扩展应用部分作为记录在这里

这将允许您在页面上询问是否使用安装了应用程序

    chrome.app.isInstalled
Run Code Online (Sandbox Code Playgroud)

这将返回布尔值,显示您的应用程序是否已安装.该命令记录在此处

但是这并没有真正解决问题,因为扩展可能已安装,但未启用,并且还有另一个扩展模拟与您的站点的通信.

此外,验证在客户端,因此可以覆盖使用该验证的任何函数以忽略此变量的结果.

但是,如果交互意味着制作XMLHttpRequests,那么你就不走运了.由于源代码的可见性,无法使用当前方法完成,如上所述.

但是,如果它限制您的站点对授权实体的可用性,我建议使用常规的身份验证方法:让用户登录将允许您创建会话.此会话将传播到扩展程序发出的所有请求,因此您可以在常规客户端登录信任问题,例如帐户共享等.这些当然可以通过让用户通过他们的Google帐户登录来管理,而这些帐户大多数都不愿意通过阻止似乎被滥用的帐户来分享和进一步缓解.