【问题标题】:How to restrict Chrome Apps to only work on specific computers?如何将 Chrome 应用程序限制为仅在特定计算机上运行?
【发布时间】:2014-05-18 16:05:07
【问题描述】:

我正在使用 Chrome(打包)应用程序开发 POS 客户端。它将在已安装的计算机上本地运行,并通过 Web 服务与服务器交互。此应用只能在商店的特定计算机上运行。

我知道我可以去每个商店安装 .crx 文件,在这种情况下,我不必将应用程序发布到 Chrome 网上应用店。不过,我希望将它发布到 Chrome 网上应用店,以便我可以利用它的自动更新功能。

我应该怎么做才能确保应用程序只能在商店的计算机上运行? (我可以去商店并在第一次安装时设置任何需要的东西)。

我想到的选项:

  1. 创建一些密钥并在第一次运行时将其输入到应用程序中。
  2. 构建一个小工具(winforms 应用程序)来生成基于时间的令牌并将其安装在计算机上。工作人员每次打开应用都需要输入令牌。

有更好的方法来完成这个吗?

【问题讨论】:

  • 您的目标是保护版权吗?
  • @sowbug 的目标是防止员工从商店外访问系统,即使他们有自己的帐户。

标签: security token google-chrome-app software-distribution secret-key


【解决方案1】:

您说应用需要与网络服务通信才能工作。这是一个简单方法的关键。 (假设您不关心员工是否获得了客户端应用程序的非功能副本。)

  • 在启动时,应用程序会检查是否存在存储在 chrome.storage.local 中的某种验证。如果存在,则继续启动。
  • 如果缺少验证,应用会检查是否存在存储在 chrome.storage.local 中的 GUID。
  • 如果 GUID 丢失,请使用 window.crypto.getRandomValues() 之类的方法生成并存储一个。
  • 通过发送 GUID 并获得响应请求服务器进行验证。
  • 如果返回验证,请将其保存在 chrome.storage.local 中并返回到此序列的开头。
  • 否则告诉用户迷路。

这种方法的完整版本将具有一些附加功能:

  • 使用 HMAC(GUID,机密)进行验证。我假设员工不是科技巨星,所以像布尔值这样简单的东西可能就足够了。
  • (可选)添加每次启动的步骤,发送 GUID 和验证并确认每次仍然有效。
  • 请求验证时,您可能会提示输入您在问题中提到的密钥。在正常情况下,这仅在配置时才需要。
  • 如果您还没有弄清楚,服务器现在就像一个简单的许可服务器,因此您可以决定如何确定验证请求是否成功。也许它一次只允许存在 N 个验证,或者在您完成配置后,您将硬编码未来的验证失败。也许它将验证请求限制在某些 IP 地址。您可以选择。

这就是要点。这是一个简单的 DRM 系统,比安装时输入密码更容易管理,但它无法承受超过 30 分钟的攻击(因为聪明的攻击者只会将另一台机器的 GUID 和 HMAC 验证注入复制机器的 chrome.storage.local)。

【讨论】:

  • 感谢您的回答。但我仍然不完全理解你的方法。应用程序将自己生成 GUID 还是通过其他程序?服务器如何知道生成的 GUID 是有效的?商店外的计算机是否可以使用相同的过程来生成 GUID?
  • 我的回答中已经解决了前两个问题。其实第三个也是。但为了强调:“也许它一次只允许存在 N 个验证,或者在你完成配置之后,你硬编码未来的验证失败。”应用程序的实例会生成 GUID,因此您可以区分实例。验证服务器确定哪些 GUID 有效。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2013-09-01
相关资源
最近更新 更多