ASP.NET - 阻止应用程序使用的最佳方法是啥?
Posted
技术标签:
【中文标题】ASP.NET - 阻止应用程序使用的最佳方法是啥?【英文标题】:ASP.NET - What is the best way to block the application usage?ASP.NET - 阻止应用程序使用的最佳方法是什么? 【发布时间】:2011-01-21 14:49:54 【问题描述】:我们的客户必须按月支付费用...如果他们不这样做,阻止 asp.net 软件使用的最佳方法是什么? 注意:应用程序在客户端自己的服务器上运行,它不是 SaaS 应用程序...
我的想法是:
想法:在 Internet 上托管一个 Web 服务,应用程序将使用该 Web 服务来了解客户端是否可以使用该软件。 问题 1 - 如果客户端互联网出现故障会怎样?还是数据中心出现故障? 可能的答案:让每个 Web 服务访问发送一个有效期为 7 或 15 天的密钥,因此每个 Web 服务咨询将使软件运行更多 7 或 15 天,这样应用程序将仅在 7 或 15 天后锁定,无需咨询我们的网络服务。 问题 2 - 如果客户端没有或不想启用对应用程序的 Internet 访问?
想法 2:每月向客户发送一个密钥。 问题 - 如何制作离线密钥? 可能的答案:使用“限制”日期生成哈希,因此每次登录尝试软件都会将今天的哈希与密钥进行比较? 问题 2 - 在哪里存储密钥? 可能的答案:数据库(不好,太容易更改)、文本文件、注册表、代码文件、程序集...
任何意见将不胜感激!
【问题讨论】:
任何意见:这种商业模式只会产生问题,远远不止这个。 您是否有问题,或者这是预防性的?我认为这是相关的,因为它可能与您如何处理解决方案有关。暂时的还是长期的…… 【参考方案1】:啊,DRM 的古老问题。这就是你在这里所说的。坦率地说,你的问题的基本答案是:你不能。无论您对系统做什么,它都可能被黑客入侵和修改,从而可以绕过和/或破坏您的 DRM 身份验证方案。
这是软件开发的一个基本事实:它可以并且将会被盗版。
因此,您的问题的答案是,您必须相信客户会向您支付您认为正确的费用(在这种情况下,这是合同的重点)。
您采取的任何其他行动都会给您的付费客户带来困难和烦恼,并有可能侵蚀您的客户群。
现在,如果您希望按照描述的性质控制您的软件,请不要将其提供给用户以在他们自己的服务器上运行。强迫他们成为SaaS。这样,您就可以控制所有这些。但这是唯一的方法。
您似乎没有想到的事情,但我看到网络不允许任何类型的“拨号回家”解决方案,因为大多数系统都集中在内部,因此不允许使用这些内部服务器联系外部互联网。完全没有。甚至允许他们访问被认为是一种安全风险。您将如何处理这些网络?
坦率地说,如果我是客户,并且我支付了许可您的软件(我安装在我自己的设备上)的费用,如果我不得不允许该设备访问互联网以使其工作,我会很生气.如果有问题的软件是任何类型的财务管理、客户管理、人力资源管理、质量管理、库存管理、销售或与我的业务、客户或员工相关的任何东西,那就更是如此。当我的业务相关数据保存在他们的软件中时,我对软件开发人员的信任不足以让他们的软件与其他东西对话。
最后,您所描述的是对您的付费客户采取的对抗方法。如果您不相信我,请查看 UbiSoft 为他们最新的讨厌客户的 DRM 计划而获得的 cmets。
IMO,这里有两条好路:
-
走向 SaaS
确保您的合同有
咬人不付款
【讨论】:
对于 #2.,请确保您可以在必要时(而不是如果)强制执行合同。 我们的软件可以盗版,但不会。那是因为我们只提供高度定制的软件,完全专注于客户问题,而且世界上可能没有人拥有与这个客户完全相同的变量,所以没有人会找到使用该软件解决任何问题的方法。而且由于它是定制的,所以我们必须控制访问,我们需要随着时间的推移从同一个客户那里获得最高的利润,如果客户找到一种不用付费的方式使用它,那么软件可以被扔掉在垃圾桶里,我们不会把它卖给任何其他客户,因为没有人会想要它 @frustrated - 因此是“咬”声明。 @Tufo - 还有?你的陈述没有任何改变。事实是,我构建的大多数软件都是为我的客户量身定制的。这就是为什么我对软件的创建按小时收费,然后忘了它,直到他们想要更改时我再次按小时收费。 +2 斯蒂芬。添加更多:他们总是需要一些修改、支持服务、故障排除等。如果他们试图盗版您的软件,当然,他们会在需要您时支付更多费用。届时,合同将为您提供帮助。【参考方案2】:通常您会提供一个加密密钥,其中包括一个有效的授权令牌和支付服务的到期日期。然后安装程序将使用它来“激活”您的软件。如果您有 1-2 周的周期,不确定如何看待这一点。您想警告他们即将到期。也不知道如何判断他们是否把自己的时钟调回去了。
简而言之,没有什么是完美的。
【讨论】:
+1 表示“倒计时”点。该系统应该独立于日历(或尽可能)。一种方法是从不依赖本地系统的时钟并始终询问许可证服务器现在是什么时间。这需要持久的网络连接和与许可证服务器的每日“签到”。【参考方案3】:我以前处理过这个问题,但不可能做出一个完美的系统。你做的任何事情都有风险。最好的办法是权衡您的选择,并确定最不可能被黑客入侵和最有可能为客户正确、轻松地工作的方法。
就像其他人所说的那样,他们可以更改时钟并使许可证检查机制无效。如果您不信任该用户,您可以让许可系统连接到您的服务器。然后,您需要确保他们始终连接到您的服务器以检查许可证。
如果他们有正当理由无法访问您的服务器怎么办?
他们的互联网连接有问题。 您的互联网连接有问题。在这种情况下,您应该禁用该应用程序吗?可能不是。但是话又说回来,如果他们故意关闭连接怎么办?然后你会想要禁用该应用程序。
如果你给他们每月的钥匙,你会增加每月的烦恼,一段时间后你可能会失去一个客户(人们倾向于与那些让事情变得容易的人做生意)。
例如:如果您基于他们的时钟,并且应用程序出于某种原因需要他们的时钟准确,那么客户不太可能更改他们的时钟。
【讨论】:
【参考方案4】:我同意斯蒂芬的观点,但归根结底,我认为你的合同是你最好的盟友。
如前所述,您不希望给客户带来不便,尤其是在您进行大型部署的情况下。
至于SaaS,如果我是使用您产品的客户,并且您说型号正在改变,我们需要从您的服务器访问该软件,而我们的服务器必须停用,我' d不高兴。我可能会利用这个机会换包。
【讨论】:
【参考方案5】:在公司环境中,合同确实是处理这些问题的最佳方式。我曾处理过桌面和 ASP.NET 应用程序的许可问题,它们可能会给您和您的客户带来许多麻烦。
但是,如果您坚持使用这样的东西,我建议您采取中间立场。与其只解锁应用程序一两个星期,不如提供 6 个月或一年的许可证。这样,如果您遇到许可问题(并且您会遇到问题),它们每年只会发生一次,而不是每月发生几次。这对您来说会更便宜,而且您的客户对处理许可问题的不满也会减少。如果公司停止付款并且您需要终止许可,您可以一次性处理,根据需要使用合同强制执行。
在 Web 服务或客户端许可选项方面,我认为一个好的许可系统将两者结合起来。客户端许可证用于为应用程序提供稳定的许可证和 Web 服务,以便在应用程序更新时生成和交付许可证密钥。如果客户端不允许应用程序调用 home 获取许可证密钥,也提供手动输入方法。
如果您要在客户端上存储许可证,请不要尝试自己构建组件。有许多可用的组件将比您构建的组件更加强大和可靠。您可以使用一个.NET .licx-based licensing method 和多个3rd party methods。哪一个最合适取决于您的场景:您希望许可证有多灵活以及您需要哪些其他选项。最重要的是,找到可靠的东西 - 任何时候您的客户花在解决由许可引起的问题对他们来说都是无效的,并且会对应用程序产生不良影响。
要记住的重要一点是,没有系统是万无一失的。如果您的应用程序很有价值,那么有人会想办法窃取它。但在企业层面和定制软件中,授权更有可能用于提醒人们付费,而不是阻止批发盗版。
【讨论】:
以上是关于ASP.NET - 阻止应用程序使用的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ASP.NET MVC 实现字段验证的最佳方法是啥? [关闭]
对 ASP.NET 2.0 网页进行单元测试的最佳方法是啥? [关闭]