我有一个剧本,我把它卖给了一些人。我需要一种方法来确保我的脚本不会在我的客户列表之外的任何网站上运行。
- 首先,我使用 IonCube 来加密我的 PHP 代码。
- 我的所有客户端都在我的服务器数据库中。
- 每个客户都有一个域名、电子邮件、姓名、电话。
避免使人们窃取我的脚本的最佳方法是什么?
我阅读了有关在脚本中制作许可证密钥的信息,因此任何没有许可证的脚本都将无法工作。但是,有很多方法可以在不获得我的许可的情况下生成许可证密钥?
我只需要不激活任何域名中的任何脚本,除非我的客户列表中有它。
你的问题很有趣,因为太多的 php 开发人员想知道同样的事情。如何保护我的产品不被盗窃和复制?
一些评论说不要贪心,但事实是很多人以编程为生,所以这不仅仅是你作为爱好构建的一些软件的问题,这是你的工作,你应该得到报酬它,就像任何其他职业一样。
可悲的是,PHP 是一种很难保护的语言,但我会给你一些建议:
1)不要相信加密:我见过太多的解密代码的工具,即使是我曾经信任的一些工具,比如 Zend Guard,也容易受到攻击。我见过的最先进的工具可以在几分钟内揭示你的代码。
编辑:关于加密的另一件事我忘了提及。它将要求服务器安装某些特殊模块才能使您的代码正常工作,这对于所有使用共享主机且无法安装解密模块的人来说是一个交易破坏者。
2)尝试混淆:即使你的代码仍然可读,但如果混淆器在混合变量、添加废话和在函数内制作函数方面做得很好,代码本身将变得几乎不可修改,因此尝试将毫无用处修改它。
3)利用混淆在您的软件本身中插入域锁定代码:而不是许可证文件,只需将软件出售给某个客户,并在软件本身中带有一些域验证码,这种方法与混淆相结合,就可以了很难弄清楚要改变什么以使其在其他领域工作,所以你可能会实现你的目标。
4)做一个伟大的软件:这是最重要的部分,构建一个人们愿意支付的优秀软件,为它创建一个合适的网站,在那里宣传。
我希望我对你有所帮助。
Adobe、微软和其他公司没有过度积极地追捕盗版是有原因的(不是说他们没有,只是没有达到史诗般的专制水平)——他们的大部分收入来自企业之间的销售和支持。一个简单的许可和支持结构通常足以让自己从想要您的产品的合法企业和各方那里获利。
如果您要向任何人提供代码,技术保护将是一场失败的战斗。这就是SaaS如此受欢迎的原因。
您可以使用http://www.ioncube.com混淆您的源代码或使用http://www.phplicengine.com远程或本地许可您的 php 代码。
我只需要不激活任何域名中的任何脚本,除非我的客户列表中有它。
好的,你已经足够缩小了。
创建您的 openssl 证书,硬编码公共部分以检查代码,在使用您的私钥颁发许可证签名 domain.name 字符串时,在您的许可证中发布签名部分作为许可证:
$lic=<<<EOL
LICENSE CODE HERE - SIGNATURE of string contained domain name
EOL;
在您的代码中检查许可证:
include 'license.php';
$cert=<<<EOK
PUBLIC KEY DATA HERE
EOK;
$pub_key=openssl_get_publickey($cert);
$ok = openssl_verify($_SERVER['SERVER_NAME'], $lic, $pub_key);
if ($ok !== 1) {die ('bad license!')}
O'c 都应该尽可能地加密。
这对于特制的 libopenssl 二进制文件可能很脆弱,但我希望它会对你有所帮助。为避免运行此类代码,您可以添加如下条件:
if (int(random()*100))==6) {check_license();}
但这取决于应该保护哪个部分。
此外,在代码的所有部分中,您应该检查包含许可证检查代码的文件的 md5summ。
锁定您放弃的基于脚本的代码的唯一真正方法是让该代码的核心部分在您控制的服务器上执行 - 并将您提供给客户的代码“回电”到您的每次执行时的服务器。然后你所要做的就是根据请求的 ip 阻止对这个“回拨”脚本的访问。
此外,在这种“回拨”机制中,仅执行简单的连接测试或握手是没有好处的,因为这是可以解决的——服务器上的脚本必须对整个系统做一些不可或缺的事情,以便客户端能够必须重写丢失的部分才能在您不知情的情况下在其他地方使用您的代码。这可能是一些关键计算或数据提供。
显然这并不理想,因为许多客户端不喜欢调用远程服务器的脚本,而且您必须确保您的网络和服务器可以处理请求的数量——否则您将减慢或超时您的客户端自己的系统。
There are some good comments from other posters to this. Depending on the edition of the ionCube Encoder that you're using the features that you need are there already (in Pro and Cerberus), including features to allow you to craft your own layers of licensing if you wish, though this shouldn't be necessary. Some basic steps give the biggest wins, and as others have said, it's not generally worth going over the top with a massive licensing infrastructure. Keep in mind too that a main benefit to licensing comes not so much from stopping those who are intent on cheating and not paying, but from keeping the paying customers in line.
Say that you have a fee for each domain where your software is used. If you mention this somewhere but do nothing to enforce it, then when an honest customers tries your scripts on a second domain and finds that it works, chances are that they'll simply use it without even realising that they should have paid. In contrast, if your software alerts them to the fact that a new license is needed, it's likely that they'll purchase for the second domain.
Realistically it's impossible to stop the most determined thieves, and as one poster eluded to it may even be beneficial in the long term to have cheaters using software for free rather than not at all, but licensing can definitely lock in revenue from the honest majority who are happy to purchase good software (plus support, bug fixes, upgrades etc.), and it's foolish not to do that.
我的想法是您无法成功保存代码以使其为空。我真的不喜欢创建非免费应用程序的方式,但我不会评判你。保护代码的最佳解决方案有时不值得,因为许多人(阅读网站)的托管非常有限,他们无法安装 ioncube... 最好的保护是加入多种类型的保护(例如 IonCube + 注入许可证连接到您的数据服务器在不同的地方使用不同的代码+如果站点需要使用一些 ssl,您可以尝试通过在您的数据服务器上出售带有公钥检查的 ssl 来进行一些保护),或者很多很多其他方式,只是有创造力的)
但正如我所说,如果你想要非常高的保护,你会因为创建它而蒙受损失,而失去客户也会蒙受损失,因为他们使用了一些廉价的托管......
你需要考虑一切...
忘了说:在您的服务器上托管是最好的保护,但也有缺点:您需要添加“模板”站点的可能性,创建一些插件的访问权限,以及类似的东西......但有时客户只是不喜欢保留您托管服务器上的所有数据。
我想我以某种方式帮助了...