保护PHP代码的最佳解决方案(无需加密)

77
首先,我不是在寻找奇迹...我知道PHP的工作原理,没有加密就无法隐藏我的代码,除非使用扩展,并将其安装在正在运行的服务器上。
然而我正在寻找一些不同的东西...我不想加密我的代码甚至混淆它。有许多PHP脚本没有加密或混淆的代码,但它们是商业应用程序,例如vBulletin和/或IP.Board论坛应用程序。
我只是想知道这些人用于他们应用程序的方法...
另外,我也开放接受任何其他建议。
请注意,我是个人并非为公司工作。我的产品非常特定,销量不会很高。我只是想让大家知道我没有足够的财力咨询法律专业人员起诉某人或准备商业许可证。如果可能的话,我只是在寻找一种简单的方法来保护我的简单产品...
11个回答

36
混淆代码只会给你的合法、守法的客户带来不便,而那些想要欺骗你的人并不是你的目标付费客户。另一个保护软件的建议是:创建一个商业模式,其中代码是您提供的价值不完整的一部分。例如,销售产品许可证以及访问您在网站上管理的某些数据,或按订阅模式或客户支持许可产品。设计最终用户许可协议是法律问题,而不是编码问题。您可以开始阅读一些您使用的产品和网站的最终用户许可协议文本。您可能会发现一些有趣的细节!创建专有许可证非常灵活,可能超出了StackOverflow的预期范围,因为它不是严格关于编码的。我想到了一些最终用户许可协议的部分:
- 如果产品存在漏洞或造成损害,限制您的责任。 - 明确客户如何使用其许可软件,使用多长时间,在多少台机器上,是否具有重新分发权利等。 - 给您审核他们的网站的权利,以便您执行许可证。 - 如果他们违反最终用户许可协议,例如,失去使用您的软件的特权。
您应该咨询法律专业人士准备商业最终用户许可协议。编辑:如果这个项目无法证明律师费用,请查看这些资源:

2
就像我在第一篇帖子中说的那样,我不想使用混淆,因为这样做实际上没有任何意义。唯一使用混淆的原因是防止其他人在未付费的情况下使用脚本。如果您想防止客户干扰您的代码并“强迫”您给予支持,混淆可能会很有用。但这不是真正的问题所在。关于 EULA 的事情,基本上就是 Eran Galperin 所说的,我对他的回答也适用于这里。 - rfgamaral
1
咨询法律专业人士对我的需求来说是疯狂的。我负担不起这样的费用,而且我的产品也不会卖得那么好哈哈。虽然这只是一个简单的产品,但我还是想以某种方式保护它。 - rfgamaral
@BillKarwin,我觉得很有趣的是你在同一句话中说“那些想要欺骗你的人不是你的目标受众”,然后又说“创建一个托管数据的商业模式”——也就是创建一个人们基本上无法欺骗你的商业模式。我一遍又一遍地听到这种情绪,但我就是不明白。 - kalenjordan
@BillKarwin 诱惑我回复,但我知道这不是一个适当的论坛来进行哲学辩论。谢谢你的想法! - kalenjordan
1
@CristianSepulveda,我不知道该怎么告诉你。如果你把你的代码交给他们,那么他们就可以完全访问它。如果你让它“更难一些”,那么你可能会阻止他们“意外”读取它,但是任何试图读取它的人仍然可以读取它。这不是任何安全策略。 - Bill Karwin
显示剩余8条评论

16

您需要考虑以下目标:

1) 您是否试图防止他人阅读/修改您的代码?如果是,您将需要一个混淆/加密工具。我使用过Zend Guard,效果很好。

2) 您是否试图防止未经授权再分发您的代码? EULA/专有许可协议将赋予您法律权力来阻止这一点,但实际上并不能完全防止。密钥/激活方案将允许您积极监控使用情况,但除非您还加密您的代码,否则它可以被删除。如果您想这样做,Zend Guard也有锁定特定脚本到特定客户机器和/或创建时限版本的功能。

我不熟悉vBulletin等论坛软件,但它们要么需要加密/混淆,要么需要信任其用户做正确的事情。在后一种情况下,他们拥有EULA的保护,禁止他们认为不良的行为,并且有法律制度来支持EULA的违反。

如果您没有准备好/能够采取法律行动来保护您的软件,而且您不想加密/混淆,那么您的选择是a)发布带有EULA的软件,以便在需要时具备法律选项,并希望一切顺利,或者b)考虑使用开源许可证可能更合适,只需允许再分发即可。


Zend Guard 只能进行混淆吗?我已经下载并尝试使用了一下,它似乎只允许编码和混淆,而不能仅进行混淆? - kalenjordan
我有一个问题要问。如果我想要防止我的代码被盗取怎么办?假设我正在与一个小组合作,并且每个人都可以访问cpanel。如果我的代码被泄漏了,我该如何采取行动?或者我该如何防止它泄漏? - Sohan Arafat

6
我已经有一段时间没有查看VBulletin源代码了,但他们在2003年左右的做法是在代码中嵌入对其服务器的调用。如果我没记错,它是在一个非常长的代码行上(像200-300+个字符长),并且分成几个字符串连接等。如果你盗版也不会有任何“坏”影响——论坛仍然可以100%工作。但是你的服务器IP将与其他信息一起被记录下来,他们会利用这些信息进行调查和采取法律行动。你的许可证号码嵌入了这个调用中,因此他们可以轻松地跟踪给定许可证副本运行的IP地址/网站数量。

我明白了...不过这很容易从代码中删除。还是谢谢你的见解。 - rfgamaral
确实如此,如果你知道你在寻找什么。我的一个朋友发现了它并向我指出。它并不容易找到,我们花了几分钟才弄清楚这个代码到底是做什么的。 :) - Alarion
是的,他们可以找到它,但你也可以在应用程序中不时地调用该函数来分散它。让他们做更多的工作来使其运行。 - Justin Yost
如果您不想混淆、编译或以其他方式“隐藏”源代码,那么您真的没有太多其他选择。这是一个需要权衡的抉择。要么保持源代码开放,冒着失去更多销售的风险,要么混淆并希望获得更多销售。 - Alarion
如果嵌入式调用的一部分是下载一个核心文件(类),而没有它,CMS 的其余部分将无法使用,那该怎么办?当然这可以被镜像,但那时 IP 已经被记录下来了,为时已晚。如果主机站点已经宕机,又会发生什么呢?我仍然不确定是否有完全防止 PHP 盗版的解决方案。 - Talvi Watia

3
如果你无法创建一个“云应用程序”,让用户通过Web访问,那么可以考虑使用虚拟服务器(如VMWare、Parallels、Sun等)创建虚拟设备,并在其中安装“精简版”Linux。将你的PHP代码放在虚拟环境中,并将虚拟机安装在客户的服务器上。确保创建一种方法来防止加载进入root。当然,这涉及到必须亲自访问客户端。

1
我已经为此创建了一个库。它仅使用OPCache,以将PHP转换为操作码。该库将您的PHP代码编译为操作码,并从项目中包含的所有PHP文件中删除代码。所有生成的操作码文件都保存在服务器文件系统中,并由OPcache使用!

https://github.com/notihnio/php-cactus


1

他们以专有许可证的方式分发自己的软件。法律保护了他们的权益,并阻止客户重新分发源代码,尽管实际上这并不困难。

但正如你可能很清楚的,软件产品的版权侵犯(盗版)是一种相当常见的现象


是的,但我知道他们不只是应用专有许可证。我只是不知道细节...这就是我想知道的,以及利弊。问题是我不能对我的软件做同样的事情,由于各种原因...其中之一是我是一个人,而不是公司。我没有起诉某人所需的权力和资源。在我的国家,起诉某人需要时间... - rfgamaral

1

要真正保护你的 PHP 应用程序不被他人窃取,唯一的方法就是不分享源代码。如果你在网上发布你的代码或通过某种媒介将其发送给客户,那么除了你之外的其他人都可以访问该代码。

你可以为每个副本添加一个独特的水印。这样,你就可以追踪泄漏到单个客户的代码。(但既然代码已经超出了你的控制范围,这是否有帮助呢?)

我看到的大多数代码都附带有许可证和可能的保修条款。在脚本顶部加上一行告诉人们不要更改脚本的内容,可能就足够了。当我发现非开源代码时,我自己不会在我的项目中使用它。也许我有点天真,但我期望别人不会使用我的非开源代码!


1

我认为,但是如果你的PHP代码程序是为独立模式编写的...最好的解决方案是c) 你可以将PHP包装在像Phalanger (.NET)这样的容器中。众所周知,它与系统紧密绑定,特别是如果你的程序面向Windows用户。你只需要用Windows编程语言如.NET/VB/C#或者你在.NET编程语言家族中了解的任何语言来制作自己的保护算法。


0

0

请查看我们的SD PHP混淆器。可以处理大型PHP文件系统。PHP服务器上没有运行时要求。没有额外的运行时开销。

[2016年5月编辑]最近的一个答案指出Zend不能处理PHP5.5。SD PHP混淆器可以。


有没有像那个一样的免费版本程序? - AntonioCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接