PHP源代码加密 - 有效性和缺点

6
我有一些PHP源代码,正在与托管公司XYZ一起使用。我正在使用类似Zend Guard或ionCube的PHP加密软件来保护源代码免受任何人(sysadmin或黑客)查看。
  • 对于拥有完全系统访问权限的人(例如sysadmin或黑客),解密源代码有多容易/难?我不知道加密软件如何工作,但我认为它们使用某些密钥,这些密钥必须保留在服务器上,并因此可以被sysadmin或黑客访问。如果您在技术方面有所了解,请在答案中提供解释。

  • 使用这种源代码加密是否会减慢网站速度?如果有人有第一手经验或知道从某人那里得到第一手经验;)

我对此感兴趣,包括其技术方面,加密的有效性以及缺点,听取那些曾经使用过或考虑使用过这些技术的人的意见。

谢谢(所有有用的答案/评论都会得到赞同)

编辑:迄今为止的答案似乎忽略了我想要理解的内容..我想了解加密的有效性。我实际上没有任何需要保护免受坏人侵害的代码,上述只是一个例子,因此像开源或聘请律师这样的建议并没有解决我的技术好奇心..只要有人明白这一点,就会获得A+。


10
如果您不信任您的托管公司,请不要使用他们。如果您不信任任何托管公司,那么请自己成为主机。如果您不信任自己… - Dominic Rodger
6
没有人对你的代码感兴趣。 - user3850
你为什么想要做这个?是因为多疑吗? - Peter
1
@hop 实际上有很多人对他的代码感兴趣。你听说过几年前 Facebook 代码在中国作为新的 SNS 创业公司首次亮相的事情吗?这是一个合理的问题。 - eric
6个回答

7
加密(或编码)方案试图将您的代码隐藏为加密文件。显然,代码必须在执行时解密,这增加了无用的开销。其中一些还坚持要求主机系统安装特殊程序,主机强烈反感,因为他们不想为您设置特殊配置。但坏处是它们包含其自身失败的种子:要在目标主机上运行,它们必须包含解密软件。因此,如果您使用其中一个,您提供了访问您的代码所需的解密器。只要找到它,您的代码就完全可以解密并暴露出来。这些根本不安全。
混淆方案会混淆标识符的名称,删除注释和格式。但混淆后的代码与原始代码完全相同,没有额外的开销,也不需要特殊的运行时支持。混淆器依赖于理解程序的固有难度。当程序设计良好,名称选择得当,并且代码中有良好的注释时,程序已经足够难以理解了。我们都希望我们的程序设计良好,但如果名称不好而注释消失了,它们就很难理解。请考虑一下您对其他人代码的经验。
人们会说:“但是任何人都可以检查混淆代码并理解它”。如果您有一个小的应用程序,这是正确的。如果您的应用程序有任何规模(数十页的代码),当所有变量名称都被打乱时,理解它在做什么是极其困难的。您的代码越大,混淆就越好地保护它。
如果您想看看一个PHP混淆器做了什么样的示例,请参见我们的Thicket PHP Obfuscator

对于出色的解释点赞。关于规模的观点,是你自己的观察还是有文件记录的? - Chris
2
这是我个人的观察,但我认为这种看法被逆向工程社区广泛接受。如果你有一个大型、设计良好、文档完备的程序,它很难被理解。虽然有很多工具可以帮助人们“理解”非混淆代码,但大多数人会告诉你这些工具实际效果并不怎么好。 - Ira Baxter

7
Zend Guard和ionCube都不使用加密(在数学意义上)来保护您的代码。除了其他答案描述的混淆之外,它们所做的是编码。
这是一个通常由PHP解释器自动完成的过程,每次访问脚本时,您的PHP脚本都会被编译为字节码格式,然后执行。像Zend Guard和ionCube这样的编码器实际上进行的是等效的过程,只是它只做一次,然后只有“编译”字节码可用/上传到服务器。
这意味着实际上重新创建您曾经编写过的完全相同的代码是完全不可能的。但是,对于混淆和反向工程化编译或混淆代码以弄清其正在执行的操作并不是不可能的。
总之,我会说这些产品非常擅长保护您的代码 - 而不是保护您的逻辑

听起来这会有显著的性能优势,是这样吗? - Chris Thompson
1
我不确定,但我认为是这样的。像Zend Optimizer这样的产品使用这种技术来实现它们的性能优势,我看不出为什么您不能通过Zend Guard获得相同的结果。 - eliego

2
为什么需要加密源代码?如果您把它作为防范潜在黑客的安全保障,那么请相信我说,如果他们真的想解密您的源代码,他们会做到。根据我上次检查的情况,使用ionCube是可能的。
就性能影响而言,我认为Zend比ionCube略快一点,因为它不需要任何额外的文件。但是像我之前说过的,不要依赖加密来保护任何东西。

谢谢终于有人理解我的问题了 :) 那么我需要什么来解密代码,需要多长时间呢? - Chris
1
那要看情况了;有些服务是需要收费的,还有一款叫做Dezender的软件可以解密文件。不过,我不太想详细介绍逆向工程代码的具体步骤。 - Chris S.
针对 ionCube 是否有类似的内容可用?这是为教育项目而非外部使用。 - Chris

1
如果可以执行,就可以反编译。遵循您的法律团队以获取权利访问,而不是加密 :) 更好的方法是开源您的项目 :P
编辑:'加密' 也会大大增加执行时间!

0

你唯一能对付托管公司的方法就是拥有一个好的许可证和律师。


-1
据我所知,PHP编码器实际上并不对您的PHP代码进行编码。它们只是更改变量名称并添加不必要的垃圾代码,以使任何人都很难找出代码的作用。问题在于它们无法隐藏任何密码(无论是硬编码的管理员密码还是数据库连接数据)。
因此,它们不能确保您的代码安全,只是使其对任何人理解变得非常困难。

我认为改变变量名称并添加垃圾代码的是混淆器,不是加密器对吧?我认为加密器做其他事情,他们使用一个密钥或类似的方式,并且应该更擅长他们应该做的事情,对吧? - Chris

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