从本地托管的 Web 应用程序强制执行许可证 [关闭]

2024-07-01

假设我们有一个 Web 应用程序,它既是

  • 可通过 Internet 访问的托管解决方案
  • 能够在本地安装以用作“Intranet”应用程序

强制执行此 Web 应用程序许可的最佳方式是什么,本质上是让客户端可以轻松打开/关闭访问。我想流程会是这样的:

客户端本地安装 ---> 向中央服务器授权 ---> 允许/ 拒绝访问

另外,我希望能够确保我们可以提供免费试用,本质上是打开和关闭应用程序的某些功能。我们还必须考虑如果我们“倒闭”会发生什么。


你的想法是正确的,

使用您的中央服务器(这可以是您的托管解决方案),

如果您在托管(外部)解决方案上构建许可证检查器,您只需添加一个需要许可证密钥加密后的 Web 请求, 例如

向 {domain} 发出请求

https://{domain}.{tdl}/licenceValid/internal

发布查询字符串

licenceCrypt={licenceKey(though SHA1)}&companyId={company_id}

进行检查后返回一个 JSON 字符串,一旦纯文本版本可以工作,您就可以引入加密技术,这样您就不会通过互联网发送纯文本

Succsess : {'status':'OK','expire':'20/07/2012 00:00:00', 'check':'18/07/2012 00:00:00'}
Fail     : {'status':'FAIL','Message':'Licence has expired'}

然后用这个信息缓存结果。然后,您可以从文件加载此信息,并检查检查值是否小于当前日期。再次下载,但是如果失败并且许可证尚未过期,请继续让他们使用应用程序,但会显示一条通知,告诉他们许可证验证出现错误。许可证将于 {date} 到期,如果许可证从缓存日期块到期,应用程序会告诉他们需要检查服务器与互联网的连接,如果不起作用,请给您打电话。

如果所有其他方法都失败了,您可以使用一个笔式驱动器,上面有一个小应用程序,用新的许可证详细信息更新缓存文件,以便他们可以再次使用该软件,现在对于缓存,我建议您使用2 路加密 E.G base64 不过我会推荐一种更强一点的

然后,您的托管解决方案只需加载类并检查所请求版本的许可证,而无需任何发布,或者如果您想将托管应用程序和许可证服务器分开,您可以对本地副本实施相同的检查,这样您就不需要2个不同的代码库

Notes:您不必通过公司发送如果您可以使用数据库的 SHA1 函数来搜索数据库并进行直接查找检查以获取过期和内容

安全数据:如果您实现一个安全的应用程序,因为它保存的数据因某种原因而无法公开,以减少黑客攻击,请使许可证系统位于不同的端口上,并在服务器设置中允许它仅首先从外部调用在该端口上建立连接Linux 路由盒是理想的选择,因为 iptables 可以很简单地做到这一点,我不确定在 Windows 上设置有多容易

Update: 确保许可证不被作废

您可以实现的另一个功能是,防止人们“取消”您的许可证并且不需要任何本地更改,即在许可证服务器上验证主机名,这样当第一次使用许可证密钥时,它会将主机名保存到数据库中。许可证密钥如果另一个请求来自不同的主机名,请告诉他们他们必须与您联系重新启用许可证,因为主机名已更改大多数公司应该运行静态 IP 地址,以便他们始终拥有静态主机名,即使那里有 ISP 主机名

这仍然无法阻止有经验的人,他们可以绕过他们所需要的一切,即环回黑客,以防止您的应用程序与您的服务器通信,然后他们必须在环回上设置一个虚拟服务器以响应虚假信息

额外一英里

您可以通过将许可证系统设置为 C# 库来防止这种情况,应用程序会下载新版本,卸载现有程序集并加载到新的 DLL 程序集中,您只需确保不更改公共方法的名称即可在不破坏服务器或完整客户端更新的情况下添加更多安全性,您还可以在通信中使用某种形式的 AES 或基于证书的加密,并使用嵌入式资源将证书编译到 DLL 中。

通过上述内容,您甚至可以做得更好,为每个许可证密钥创建一个新证书,这将使“清零”变得极其困难*

正如另一个不适合 * 的情况一样,这需要服务器编译 DLL,我强烈建议您不要在托管服务器上执行此操作,因为它将使用大量内存和 CPU 功率,以最大限度地减少 MSBuild 的使用并保留所有编译数据,因此您唯一更改的是证书应该意味着它保留 .pdb 文件并且应该编译得更快

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从本地托管的 Web 应用程序强制执行许可证 [关闭] 的相关文章