加载中…
个人资料
大伟
大伟
  • 博客等级:
  • 博客积分:0
  • 博客访问:18,531
  • 关注人气:19
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

软件不续费无法继续使用的思路和实现

(2022-03-29 10:38:30)
标签:

php

encode

软件过期

分类: 技术
软件开发好后,一般Saas类软件很好处理,直接帮客户开设个账户,设定软件的有效日期,但如果是软件开发好后要交付客户使用,尤其是碰到web类程序,客户要求提供安装在自己服务器上,这种情况下就要做好相应的软件防范机制了。

  所谓先小人后君子,大概就是这个意思吧。我们来看下如何处理?

  比如php类程序,一般会采用加密方法,加密方法一般有两种,一种是自己encode,可以自行encode,也可以使用第三方encode加密;另一种是使用已有的第三方公司开发好的加密工具进行加密,比如ZendGuard,这两种加密的优缺点也很明显,前一个加密免费,但缺点是容易被人decode解密,后一个有点是不容易被破解,缺点是要付费。


软件不续费无法继续使用的思路和实现


  当然,对于普通的用户来说,一般的encode已经足够用,毕竟绝大部分客户都不是专业或工科出身。

  比如我之前选择用一款github上的encode程序,加密后的效果如下图,

软件不续费无法继续使用的思路和实现
  可以看得出,显示是乱码,这也正是想要的加密效果。

  但这款程序只能用来encode较早的老版本,不支持最新的php比如8.0版本,我查看了下源码,应该是php新的版本抛弃了一些写法,导致旧的程序在新版本中不再支持引起了。

  其实办法也是有的,就是将别人旧的encode加密程序修改一遍,以支持最新的语法或写法就可以了,但我懒得搞,还是等那位作者以后更新了新版本再说吧。:)

  其实加密还不够,软件还需要加上个有效日期,比如软件允许运行到某个时间如2022年4月1日,如果在此之前没有续费或者明确继续使用,软件就自行过期无法继续使用。

  是不是很熟悉?其实这种在当下我们购买的软件中很常见的,这种用程序怎样实现呢?我们来看下吧。

  其实实现的原理很简单,就是在系统里设定个过期日期,然后增加个判断,每次启动时,自动调用这个判断程序,发现如果当前日期未过期(有效期内),就略过不做任何处理,反之,如果发现过期,立马弹出警示信息,提示软件过期,请续费后继续使用。

软件不续费无法继续使用的思路和实现

  是不是很简单?

软件不续费无法继续使用的思路和实现


  我写了个简单的对应函数程序如图示。

  这个时候聪明的你可能会问,

  “不对呀!那万一用户自己修改了时间,让机器始终停留在过期前,那不是就可以永远免费使用软件了?”

  这个问题问的很好!实际中当然要考虑的这种情况,解决的思路也是有的,比如,我们可以每次通过取NTP服务器(*网络时间协议(Network Time Protocol*),它用来同步网络设备【如计算机、手机】的时间的协议。)时间,而不是取客户自己的服务器时间,这样即便用户修改了自己服务器时间也没有用了,毕竟我们是以公用的标准时间为准。

  代码实现如下图,
软件不续费无法继续使用的思路和实现


  获取NTP时间的程序网上有别人写好的,本着不重复造轮子的态度,我们直接拿来用就可以,
软件不续费无法继续使用的思路和实现


  有人提出了个新的问题,

  “你说的这些都是联网状态下,万一获取NTP时间有问题,或者客户故意让无法获取,那岂不是可以?”

  这个问题提的也很好,为了防止用户私下通过禁止网络等其它方式,故意绕开NTP时间,我们再增加个程序,如下图,
软件不续费无法继续使用的思路和实现

  当网络无法使用时,便提示出错。

  其中url我设置了 baidu.com 作为参考,实际中你可以根据需要设定自己需要的网址,比如设定个二级域名,当二级域名有效以及可以正常访问时,自然没问题。当停止掉二级域名时,软件自然就自动停止无法继续使用了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有