检查到期日期可以通过更改系统日期来绕过

问题描述:

我有一个使用oracle数据库的Swing应用程序。无论谁购买我的申请将被授予包含到期日期的许可证。我的应用程序会检查当前日期和过期日期以允许用户使用它。检查到期日期可以通过更改系统日期来绕过

问题是,买家可以在自己的机器上用自己的数据库*地部署我的应用程序。所以,他们可以更改系统日期以绕过我的到期检查。如果我的“当前日期”的来源是来自互联网,我放松​​了一个能让我的应用程序脱机工作的能力。

你们知道如何防止它仍然让我的应用程序脱机工作吗?

+0

嗨,我相信你可以使用这里讨论的一些逻辑。 http://*.com/questions/1871212/implementing-expiration-dates-in-an-application – Sky

+0

您采用的所有解决方案都是flakey。接受不希望为您的产品支付费用的人不会支付该产品并推出30天试用许可证并制定许可证政策。 – Ian

+0

感谢大家,我会向我的客户(命令我提出这个申请的人)解释这一点,我想我不需要在这里做任何特别的事情。 –

您可以做的一件事是将所有程序执行的当前日期的日志存储在内部配置文件中。定义第一个日期与部署应用程序的时间相近(比如说,如果您今天部署了2014年2月25日),因为在部署应用程序之前,没有客户端应该在某个日期执行您的代码。 然后,您可以分析是否有趣的事情正在与日期进行(例如,如果您注意到日期正在倒退)并相应地阻止执行。 (如果客户因正当理由而改变时间,请务必给予一点回旋余地)。

不可以。在封闭的未知环境中,没有一种可以防止这种情况的方法。即使使用了可信系统(如PHK的NTP服务器),您也可以很容易地将其颠覆(通过重新路由到始终返回同一时间的NTP服务器)。你唯一可以做的就是跟踪你的应用程序运行了多少时间。除非您的应用程序本质上是为处理时间序列而设计的。在这种情况下,你可以假定这些是准确的(否则,该工具是无用的)。