我正在使用 Chrome Native Messaging 开发一个应用程序,该应用程序通过 Chrome 扩展程序启动。
我的问题是:如何确保主机应用程序与我提供的完全相同?
我需要确保扩展调用的应用程序的真实性。如果我无权读取注册表或检查是否有更改,我该如何获取它?
我正在使用 Chrome Native Messaging 开发一个应用程序,该应用程序通过 Chrome 扩展程序启动。
我的问题是:如何确保主机应用程序与我提供的完全相同?
我需要确保扩展调用的应用程序的真实性。如果我无权读取注册表或检查是否有更改,我该如何获取它?
这是一个很好的问题,我猜答案是“不幸的是,你不能”。
实现某种加密散列(例如 Chrome 用来验证扩展文件的散列)会很有趣,但这并不是一个非常有力的保证。
考虑(所有这些假设):
保护 Chrome 扩展程序/应用程序很容易,因为您依赖的唯一“库”/运行时是 Chrome 本身(并且您信任它)。一个原生应用程序可以依赖于系统上的很多很多东西(比如已经提到的库),你如何跟踪?
无论如何,这似乎是一件有趣的事情。如果已经有类似的东西,请查看 Chrome错误跟踪器,如果没有 - 尝试提出功能请求。也许尝试一些与 Chromium 相关的邮件列表来询问开发人员。
我意识到这是一篇较旧的帖子,但我认为值得分享 Chromium 团队对我提交的错误的官方回应:https ://bugs.chromium.org/p/chromium/issues/detail?id=514936
可以修改用户计算机上的注册表或 FS 的攻击者也可以修改 chrome 二进制文件,因此此类攻击者可以通过修改 chrome 的代码来禁用在 chrome 中实现的任何类型的验证。出于这个原因,chrome 必须信任 FS(以及来自本地机器的任何东西)。
如果我正确理解了这个问题,解决方案可能是
重要的是,您的注册表号应该是安全的,并且客户端机器无法从可执行文件中获取它(使用正确的签名可以实现)
由于 chrome 停止了对 Applet 的支持,我在 chrome 中为智能卡读卡器实现了相同的功能
唯一的漏洞是,客户端机器可以借助一些工具跟踪其发送的每个请求
如果您能够使用一些 httpOnly Cookie(客户端机器无法读取)或密码机制使您与服务器的可执行通信安全,则很可能是您可以实现的安全解决方案