ASP.NET - 阻止应用程序使用的最佳方法是什么?

时间:2010-02-26 20:12:40

标签: licensing license-key

我们的客户必须每月支付费用......如果他们不这样做,阻止使用asp.net软件的最佳方法是什么? 注意:应用程序在客户端自己的服务器上运行,而不是SaaS应用程序......

我的想法是:

想法:在互联网上托管Web服务,应用程序将使用该服务来了解客户端是否可以使用该软件。 问题1 - 如果客户端互联网出现故障会怎样?或者数据中心失败了? 可能的答案:让每个Web服务访问权限发送一个有效期为7天或15天的密钥,因此每个Web服务咨询将使该软件运行7或15天,这样应用程序将仅在未经咨询我们的网络服务的情况下在7或15天后锁定。 问题2 - 如果客户端没有或不想启用对应用程序的Internet访问?

创意2 :每月向客户发送密钥。 问题 - 如何制作离线密钥? 可能的答案:使用“限制”日期生成哈希,因此每次登录尝试软件都会将今天的哈希与密钥进行比较? 第2期 - 存储密钥的位置? 可能的答案:数据库(不好,太容易更改),文本文件,注册表,代码文件,程序集......

任何意见都将非常感谢!

5 个答案:

答案 0 :(得分:8)

啊,这是一个古老的DRM问题。这就是你在这里谈论的内容。坦率地说,你问题的根本答案是:你做不到。无论您对系统做了什么,都可以通过黑客攻击和修改,以便绕过和/或破坏您的DRM身份验证方案。

这是软件开发的一个基本事实:它可以并且将会被盗版。

因此,您的问题的答案是,您必须相信客户向您支付您确定的正确费用(在这种情况下这是合同的全部内容)。

您采取的任何其他行动都会给付费客户带来困难和烦恼,并有可能侵蚀您的客户群。

现在,如果您想要按照所描述的性质控制您的软件,那么请不要将其提供给用户在自己的服务器上运行。强迫他们成为SaaS。通过这种方式,您可以控制所有这些。但这是唯一的方法。

您似乎没有想到的东西,但我看到网络不允许任何类型的“拨号主页”解决方案,因为大多数系统都是内部关注的,因此不允许这些内部服务器联系外部互联网。完全没有。即使允许他们访问也被视为安全风险。你会如何处理这些网络?

坦率地说,如果我是客户,并且我支付了我的软件许可费用(我在自己的设备上安装),如果我不得不允许该设备访问互联网以使其工作,我会感到愤怒。如果有问题的软件是任何类型的财务管理,客户管理,人力资源管理,质量管理,库存管理,销售,或者只是与我的业务,​​客户或员工相关的任何事情。当我的业务相关数据保存在他们的软件中时,我不相信软件开发人员能够让他们的软件与其他人交谈。

最后,您所描述的是与您的付费客户采取的对抗方法。如果您不相信我,请查看UbiSoft对其最新客户讨厌的DRM计划的评论。

IMO,你有两条好路:

  1. Go SaaS
  2. 确保您的合同有 咬不付款

答案 1 :(得分:3)

通常您提供的加扰密钥包括有效的授权令牌和支付服务的到期日期。然后安装程序将使用它来“激活”您的软件。如果你有1-2周的时间段,不知道如何看待它。你想警告他们即将到期。也不知道如何判断他们是否已经设置了自己的时钟。

简而言之,没有什么是完美的。

答案 2 :(得分:0)

我之前已经解决了这个问题,而且不可能建立一个完美的系统。你做的任何事都有风险。最好的方法是权衡您的选择,并确定最不可能被黑客攻击的方法以及最有可能为客户正确和轻松地工作的方法。

正如其他人所说,他们可以改变他们的时钟并使许可证检查机制无效。如果您不信任该用户,则可以使许可证系统连接到您的服务器。然后,您需要确保始终与服务器建立连接以检查许可证。

如果有正当理由无法访问您的服务器该怎么办?

  • 他们的网络连接有问题。
  • 您的互联网连接存在问题。

在这种情况下,您应该禁用该应用程序吗?可能不是。但话又说回来,如果他们故意关闭连接怎么办?然后你想要禁用该应用程序。

如果你给他们每月一次密钥,你就会增加一个月的烦恼,一段时间后你可能会失去一个顾客(人们倾向于与那些简单的人做生意)。

例如:如果你的时钟基于他们的时钟,并且应用程序由于某种原因需要他们的时钟准确,那么客户不太可能改变他们的时钟。

答案 3 :(得分:0)

我同意斯蒂芬但最终,我认为你的合同是你最好的盟友。

如前所述,您不希望给客户带来不便,特别是如果您有大量部署。

对于SaaS,如果我是客户使用您的产品,并且您说模型正在发生变化,我们需要从您的服务器访问该软件,我们的服务必须退役,我不开心。我可能会利用这个机会来切换包裹。

答案 4 :(得分:0)

在公司环境中,合同确实是处理这些问题的最佳方式。我已经处理过桌面和ASP.NET应用程序的许可问题,它们可能会给您和您的客户带来许多麻烦。

但是,如果你坚持使用这样的东西,我建议你选择中间立场。而不只是解锁应用程序一两个星期,提供6个月或一年的许可证。这样,如果您遇到许可问题(并且您将遇到问题),它们每年只发生一次而不是每月发生几次。这对你的支持会更便宜,你的客户对处理许可问题不会那么不满意。如果公司停止支付并且您需要终止许可,您可以一次性处理该许可,并根据需要使用合同执行。

在Web服务或客户端许可选项上,我认为一个好的许可系统会同时包含这两个选项。客户端许可证,为应用程序提供稳定的许可证和Web服务,以便在需要续订应用程序时生成并提供许可证密钥。如果客户端不允许应用程序调用home来获取许可证密钥,则还提供手动输入方法。

如果要在客户端上存储许可证,请不要尝试自行构建组件。有许多可用的组件比您构建的组件更加强大和可靠。您可以使用.NET .licx-based licensing method和一些3rd party methods。哪一个最合适取决于您的方案:您希望获得许可的灵活性以及您需要的其他选项。最重要的是,找到可靠的东西 - 任何时候你的客户花在修复由许可引起的问题上都是非生产性的,并且会对应用程序反映不佳。

要记住的重要一点是,任何系统都不是万无一失的。如果您的应用程序很有价值,那么有人会弄清楚如何窃取它。但在公司层面和定制软件中,更有可能的是,许可将用于提醒人们支付而不是停止批发盗版。

相关问题