在我们开发的项目中,有一部分可能是用于商业用途,会部署在客户提供的机器环境中。因为 PHP 本身是解释型语言,所以未进行处理的代码,就会有泄露或被修改的风险。那么我们可能会想到最简单有效的方法就是进行加密混淆,然后配合一系列的校验,来保护我们的代码。那么本篇文章中,我们就采用了开源的 PHP 加密扩展 screw-plus 进行相关实践分析。
目前市场上有多种加密方案,但基本都是收费的。我们本次实践采用了开源的方案。screw-plus 是一款开源 php 加密运行扩展,基于 screw 二次开发,暂时只能运行在 linux 下。虽然有些不足,但是如果加强一下,也是可以满足一些场景。

在介绍实现之前,我们先简单介绍下 PHP 扩展的相关知识以及 Hook 机制。
1 PHP 扩展周期

一款扩展的主要生命周期,就是上面的四个宏定义。
- MINIT:扩展模块初始化时执行的动作
- MSHUTDOWN:扩展模块结束时执行的动作
- RINIT:请求初始化时的动作
- RSHUTDOWN:请求结束时的动作
对应于 zend_module_entry 结构
本文探讨了在PHP项目中保护代码的安全,通过开源扩展screw-plus进行代码加密实践。介绍了PHP扩展周期、钩子机制,并详细解析了screw-plus的加密流程,包括秘钥设定、文件加密和解密过程。虽然存在CAKEY泄露的风险,但通过一些改进措施,如加壳混淆,仍能提高代码安全性。
订阅专栏 解锁全文
2904

被折叠的 条评论
为什么被折叠?



