0

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

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

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

我想到的选项:

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

任何更好的想法如何做到这一点?

4

1 回答 1

0

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

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

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

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

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

于 2014-04-06T15:14:56.747 回答