从本地托管的Web应用程序执行许可证

Mar*_*arc 3 .net javascript c# licensing web-applications

假设我们有一个Web应用程序

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

强制执行此Web应用程序许可的最佳方法是什么,从本质上讲,它很容易为客户端打开/关闭访问。我当时在想这样的流程:

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

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

Hot*_*tin 5

你有正确的主意

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

如果您在托管(外部)解决方案上构建许可证检查器,则只需添加一个Web请求,该请求就需要对许可证密钥EG进行加密

请求到{domain}

https://{domain}.{tdl}/licenceValid/internal
Run Code Online (Sandbox Code Playgroud)

发布查询字串

licenceCrypt={licenceKey(though SHA1)}&companyId={company_id}
Run Code Online (Sandbox Code Playgroud)

进行检查然后返回字符串JSON,一旦您使用了纯文本版本,就可以引入加密技术,这样就不会通过Internet发送纯文本

Succsess : {'status':'OK','expire':'20/07/2012 00:00:00', 'check':'18/07/2012 00:00:00'}
Fail     : {'status':'FAIL','Message':'Licence has expired'}
Run Code Online (Sandbox Code Playgroud)

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

如果所有其他操作均失败,则可以使用带有小应用程序的笔式驱动器弹出来更新具有新许可证详细信息的高速缓存文件,以便他们可以再次使用该软件,现在建议使用高速缓存。 2种方式加密EG base64,但是我建议使用一种更强的加密方式

然后,您的托管解决方案可以仅加载类并检查请求版本的许可证,而无需发布任何帖子,或者如果您想将托管应用程序和许可证服务器分开,则可以在本地副本上执行相同的检查,因此无需2种不同的代码库

注意: 您不必通过companyId发送信息,您只需使用数据库的SHA1函数搜索数据库,并进行直接查找检查即可获取过期信息。

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

更新: 保护许可证免于无效

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

这仍然不能阻止有经验的人员,他们可以绕过环回黑客程序,以防止您的应用程序与服务器通信,然后他们必须在那里设置一个虚拟服务器,然后环回以响应错误信息

额外里程

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

通过以上操作,您甚至可以做得更好,为每个许可证密钥创建一个新的证书,这将使“清零”变得异常困难*

就像另一个不是*要求服务器编译DLL一样,我强烈建议您不要在托管服务器上执行此操作,因为它将占用大量内存和CPU能力以最小化此使用,MSBuild并保留所有编译数据,因此您唯一需要更改的就是证书,这意味着它保留了.pdb文件,并且编译速度更快