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


72

首先,我并不是在寻找奇迹……我知道PHP的工作原理,并且没有真正的方法可以在不使用加密的情况下向客户端隐藏我的代码。但这附带了要在正在运行的服务器上安装扩展的成本。

我正在寻找不同的东西……我不是要加密我的代码,甚至是对其进行混淆。有许多没有加密/混淆代码的PHP脚本,但它们是商业应用程序。例如,vBulletin和/或IP.Board论坛应用程序。

我只想知道这些人在他们的应用程序中使用什么方法...

我也愿意接受任何其他建议。

请注意,我是一个人,没有在公司工作。我的产品也很具体,不会卖那么多。我只是想让你们知道,我无权咨询法律专家来起诉某人或准备商业执照。我只是在寻找一种简单的方法来保护我的简单产品,如果确实可行的话,以某种方式...

Answers:


35

混淆事物只会给您合法的,守法的客户带来不便,而那些会骗您的人却不是您的目标客户。(删除了其他有关混淆的想法)

保护软件的另一建议是:创建一种业务模型,其中的代码不属于产品价值的一部分。例如,出售产品许可证以及对您在站点上管理的某些数据的访问权,或者以订阅模型或与客户支持一起对产品进行许可。

设计EULA是法律问题,而不是编码问题。您可以通过阅读所用产品和网站的一些EULA文本开始。您可能会发现一些有趣的细节!

创建专有许可证具有很高的灵活性,并且可能超出了StackOverflow的预期范围,因为它不严格涉及编码。

我想到了EULA的某些部分:

  • 如果产品有错误或损坏,请限制您的责任。
  • 阐明客户如何使用许可软件,使用多长时间,使用多少计算机以及是否具有再分配权等。
  • 授予您审核其站点的权限,以便您可以强制执行许可证。
  • 如果他们违反EULA,例如他们失去使用您的软件的特权,将会发生什么。

您应咨询法律专业人士以准备商业EULA。

编辑:如果该项目不能证明律师费用的合理性,请查看以下资源:


1
就像我在第一篇文章中所说的那样,我不想使用混淆,因为这样做真的没有意义。好吧,实际上,我看到使用混淆的唯一原因与阻止其他人不付费使用脚本无关。如果您想防止客户弄乱您的代码,然后“强迫您”支持它们,那么混淆可能会很好。但这不是这里真正的问题。关于EULA的事情,基本上就是Eran Galperin所说的,我对他的回答在这里也适用。
rfgamaral

1
为我的需要咨询法律专业人士会很疯狂。我买不起这样的东西,我的产品也不会卖那么多的笑。这是一个简单的产品,但我想以某种方式保护它。
rfgamaral

好,可以。我知道一个小项目负担不起,我不知道您是否在大公司工作。
比尔·卡文

@BillKarwin,对我来说很有趣的是,你如何说“会撕扯你的人不是你的目标受众”,然后“用托管数据创建业务模型”,即创建人们实际上无法做到的业务模型。扯开你 我一遍又一遍地听到这种情绪,但我听不懂。
kalenjordan 2014年

1
@CristianSepulveda,我不知道该怎么说。如果您将代码交给他们,那么他们就可以使用它,这是句号。如果使它“不太容易”,则可能会阻止他们不小心阅读它,但是尝试的任何人仍然可以阅读它。那不是任何一种安全策略。
Bill Karwin '16

15

您需要考虑自己的目标:

1)您是否要防止他人阅读/修改您的代码? 如果是,则需要混淆/加密工具。我使用Zend Guard取得了成功。

2)您是否在尝试防止未经授权的代码重新分发? 最终用户许可协议/专有许可将为您提供防止该行为的法律权力,但实际上并不会阻止它。密钥/激活方案将允许您主动监视使用情况,但是除非您也对代码进行加密,否则可以将其删除。Zend Guard还具有将特定脚本锁定到特定客户计算机和/或创建时间受限版本的代码(如果您要这样做)的功能。

我对vBulletin等并不熟悉,但是他们要么需要加密/模糊处理,要么需要信任他们的用户才能做正确的事情。在后一种情况下,他们受到EULA的保护,EULA禁止他们发现不良行为,并提供法律制度来支持违反EULA的行为。

如果您不准备/无法采取法律行动来保护您的软件并且不想加密/模糊处理,则可以选择以下选项:a)与EULA一起发布,以便您在需要时拥有合法的选择权并希望是最好的,或者b)考虑开放源代码许可是否更合适并且仅允许重新分发。


Zend Guard只会让您混淆吗?我已经下载了它,并且正在使用它-它似乎允许您进行编码和模糊处理,而不仅仅是模糊处理
kalenjordan 2014年

我有一个问题要问。如果我想保存我的资源免遭窃怎么办?假设我正在与一个小组一起工作,每个人都可以访问cpanel。如果发生泄漏,我该如何采取措施?如何防止泄漏?
索汉·阿拉法特

7

您可以使用php编译器:

送路

电脑


似乎是个不错的工具,但FastCGI的问题使我有些退缩,例如,在Roadsend论坛上,他们说,在phpBB上,它需要首先执行而无需编译,因此需要创建数据库并创建config.php文件。我冒着我的代码可能无法正常工作的风险。
rfgamaral

1
您的两个链接都转到同一位置。
Rizwan Kassim,

1
固定。显然,未将http://放在链接前面会导致此问题。
grepsedawk

3
链接已过时...并且重定向到非PHP相关站点
Alex

6

我已经有一段时间没有看过VBulletin的源代码了,但是他们在2003年左右使用它的方式是将对服务器的调用嵌入到代码中。IIRC,它位于非常长的代码行上(例如200-300 +个字符长),并通过几个字符串连接等进行了分解。

如果您盗版,它没有任何“不好”的作用-论坛仍然有效100%。但是,您服务器的IP与其他信息一起被记录下来,他们用它来调查并采取法律行动。

您的许可证号已嵌入此呼叫中,因此他们可以轻松跟踪给定的许可证副本正在运行多少个IP /网站。


我知道了...不过很容易从代码中将其删除。但是,感谢您的见解。
rfgamaral

的确,如果您知道要寻找的是。我的一个朋友找到了它,并向我指出了。这并非易事,我们俩花了几分钟的时间弄清楚代码到底做了什么。:)
Alarion

是的,他们可以找到它,但是您可以做的是不时在应用程序中撒些它以调用该函数。给他们更多的工作以使其运行。
贾斯汀·约斯特

究竟。如果您不想混淆或编译或以其他方式“隐藏”您的源代码,那么实际上您无能为力。需要权衡取舍。要么开放源代码并冒失去更多销售的风险,要么混淆并希望获得更多销售。
阿拉里昂

如果嵌入式调用的一部分是下载一个核心文件(类),如果没有该文件,它将导致CMS的其余部分失去作用?当然这可以被镜像,但是到那时IP被记录了,为时已晚?如果主机站点关闭,会发生什么?我仍然不确定是否有防止PHP盗版的完整解决方案。
塔尔维·瓦蒂亚

3

如果您无法创建自己托管并可以通过Web访问的“云应用”,则可以考虑使用虚拟服务器(来自VMWare,Parallels,Sun等)创建虚拟设备,然后安装“在该版本的Linux上。将您的PHP代码放在虚拟环境中,然后在其服务器上安装虚拟机。确保创建防止加载到根目录的方法。当然,这将涉及亲自亲自拜访客户。


1

他们根据专有许可证分发软件。法律保护他们的权利,并阻止其客户重新分配来源,尽管这样做没有实际困难。

但是,您可能已经知道,软件产品的版权侵权(盗版)是很常见的现象


是的,但是我知道他们不会简单地申请专有许可证。我只是不知道细节...这就是我想知道的,以及利弊。问题是由于种种原因,我无法对自己的软件执行相同的操作……其中之一是我是一个人,而不是公司。我没有起诉某人的权力或资源。而在我国,这将需要时间来起诉某人……
rfgamaral

1

我认为是,但以防万一如果您的php代码程序是为独立模型编写的……最好的解决方案是c)您可以将php包装在类似Phalanger(.NET)的容器中。众所周知,它与系统紧密绑定,特别是如果您的程序是针对Windows用户的。您只需使用Windows编程语言(如.NET / VB / C#)或您在.NET prog.lang.family集中所知的内容,即可制定自己的保护算法。


0

真正保护您的php应用程序免受其他攻击的唯一方法是不共享源代码。如果您在网上将代码发布到某个地方,或者通过某种媒介将其发送给客户,那么您将无法访问该代码。

您可以为代码的每个单个副本添加唯一的水印。这样,您就可以将泄漏追溯到单一客户。(但是,由于代码已经超出您的控制范围,因此对您有帮助吗?)

我看到的大多数代码都带有许可证,也可能有保修。脚本顶部的一行告诉人们不要更改脚本,这可能就足够了。自; 当我找到非开源代码时,就不会在我的项目中使用它。也许我有点傻,但是我希望ppl不要使用我的none-OSS代码!




-6

所以让我看看,我们想向亚当和夏娃展示一棵树上有一些禁果,并且我们想要一种防止它们进食的方法...

拥有一个用火焰之剑的天使怎么样?

  1. 可能听起来很幼稚,我不知道您的应用程序实际上是做什么的,但是广泛使用include呢?

  2. 对于合法用户来说,所有软件应该是可见的还是仅部分可见?因为您可能会混淆并提供合法的源代码副本

  3. 您可以将php包装在类似Phalanger(.NET)的容器中

  4. 也许您担心外部盗窃,这意味着您的代码在客户使用时可以在网络上自由显示。这可能值得投资一个便宜的网站托管服务,每年50美元,用代码中的序列号注册合法客户,并使您的应用程序定期将信息发布到您的网站上。至少,您将检测出代码何时遭到入侵。您可以在n天后自我毁灭地推动它,给您足够的时间与您的客户联系并更改序列号。这可能是整个代码中唯一被混淆的include()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.