我想发布一些PHP源代码, 我需要提供一种方法来验证这些源代码是否未被更改。
所以基本上我想签名(如果可能的话使用PHP),然后检查他们的签名(使用PHP是必须的,它必须在linux和windows上工作)。
我一直在挖掘,我发现的是:
如果有人可以验证此过程(或表示更好的过程),那将是一个很好的帮助。
因为我试图给出我从现在开始的理论解决方案,但在理论和实践之间,它们应该是一个差距。特别是考虑到我对这个概念不熟悉,并且我的项目在安全方面具有可靠性至关重要。 我提醒说,几年前使用苹果的签名过程是一件很痛苦的事情,而且我对创建安全解决方案的能力没有信心。
答案 0 :(得分:0)
关于签名的phar文件,我上次检查时的默认行为是:
因此,很容易通过简单地剥离签名来绕过签名保护(实际上,您只需要将文件标记为未签名即可)。您可以显式设置phar.require_hash选项,以在实例中删除此后门。
确认这些源代码未更改
嗯。这有点含糊。由谁修改?如上所述,您需要客户端选择加入基于Phar签名的安全模型。
有很多第三方PHP编码器通过混淆代码来工作。它们几乎都提供了可笑的保护级别。 IonCube编码器和Zend编码器有几个例外。我对这些还不够熟悉,无法说出它们的强度以及它们是否满足您的要求。
有一些开源的PHP编译器可以将PHP源代码转换为.so扩展名(特别是Facebook HipHop),但我认为两者都不会得到维护。
如果您只想确保已验证的内容可供客户使用(并且您不担心客户修改文件),则只需对PGP或x509使用标准文件签名即可。
如果您想防止客户修改PHP代码,那么我知道的唯一选择(并且我自己尚未对其进行测试)是将代码作为HHVM字节码分发-但这不能抵抗反向工程,它没有内在的,安全的验证机制,并且实际上不打算用作保护代码的方法。