swoole加密可开心吗
程序的执行和加解密过程合二唯一,无论是内部开发人员和外部黑客攻击,即使拿到了数据和私钥和服务器的root权限,也无法解密还原数据。
Swoole将加解密分成了3部分(程序+算法+私钥),缺一不可解密。只有用对应Swoole Compiler编译生成的PHP程序才能将数据解密。
Swoole Compiler数据加密使用非对称加密,需要生成公钥和私钥。Swoole Compiler提供了两个函数来实现加密和解密。这2个函数必须在已加密的程序中才能使用,在未加密的PHP程序无法使用。
swoole-compliler gen-keypair
生成公私钥
执行成功后,会在当前目录生成public_key和private_key两个文件。
public_key 公钥,用于加密
$encryptedData=swoole_encrypt($oriData,"./public_key");
private_key 私钥,用于解密
$oriData=swoole_decrypt($encryptedData,"./private_key");
适用场景
Swoole Compiler数据加密非常适合用于对数据安全敏感的后台程序,如存储用户银行卡、身份证号等用户隐私信息。使用Swoole Compiler数据加密,存入数据库。
常见问题
1.报错:"load file /www/wwwroot/xxx.php failed error: Success [0]"
- 解决办法:确认xxx.php的文件权限是否正确,或者查看文件是否有损坏的情况(加密之后很多FTP工具会导致文件损坏)。
2.报错:"the code encrypt by php 7.1 , but the loader version is 5.6"
- 解决办法:加密时候的版本号要和解密端(运行加密的php代码的机器)的php版本号对应上。
3.安装loader扩展后 运行一个非常简单逻辑的加了密的php代码 报"segment fault"或"Allowed memory size of xxxx"错误
- 确保你的php没有安装incube loader、xdebug、zend guard loader扩展。
- 确保swoole_loader的版本和加密器的版本对应上,例如1.9版本的加密器对应1.9版本的loader。
- 确保你的php是非`Debug`版本,使用 `php -i | grep "Debug Build"`查看是否有`Debug Build => yes`,`Swoole Compiler`不支持`Debug`版本,请安装非`Debug`版本的`PHP`
4.报错:"PHP Fatal error: Unknown: product xxxxxxx can not find in license file in Unknown on line 0 Fatal error: Unknown: product xxxxxxx can not find in license file in Unknown on line 0"
- 解决办法:添加授权信息后加密的代码包里面会包含一个license授权文件
- loader端需要在php.ini中添加以下配置:
- swoole_license_files=/yourpath/swoole-compiler.license
yourpath为存放license授权文件的路径
5.访问提示:"Loader ext not installed"
- 解决办法:
- 1.确认你的swoole-loader扩展是否安装成功
- 2.确认你的PHP版本、加密器版本以及swoole_loader的版本是否一致
6.报错:"Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 18446744072850426110 bytes) in Unknown on line 0"
- 错误原因:加密器版本和loader版本不一致
- 解决办法:加密器版本和loader版本对应上即可
7.报错:"Fatal error: Unknown: the license config file format error , use ini format and do not modify it in Unknown on line 0 "
- 错误原因:license文件上传损坏,可使用md5sum或sha1sum查看对比
- 解决办法:更换上传文件的工具,推荐scp等
8.多个license文件,配置正常却报错"Fatal error"
- 错误原因:可能product_name存在相同,导致无法正常匹配license文件
- 解决办法:使用swoole_get_license()函数打印配置信息,查看是否相同,如果相同需要修改product_name后重新生成license
9.license文件加载报错"the file xxxx.license can not access"
- 错误原因1:确保存在此license文件,并且PHP项目有权限读取
- 错误原因2:确保php.ini的open_basedir设置正确,能读取到这个license所在目录
FTP工具
推荐使用scp、winscp、宝塔,禁止使用filezilla
loader扩展兼容性
因为swoole_loader无法和xdebug、ioncube、zend guard loader、swoole_tracker扩展兼容,使用前需要先卸载.
关于license文件
在compiler 2.0版本以后,客户端授权改为授权文件的方式,填写授权文件信息的时候有个product_name的字段是授权文件的key,每个product_name对应一个授权文件,例如你的整个代码里面有2个产品,2套授权逻辑2个license,产品名为PA和PB,那么你需要生成2个授权文件并在php.ini中配置,用,分割,例如swoole_license_files=/yourpath/licenseA,/yourpath/licenseB,A产品的php文件会根据产品名去授权文件里面找对应的license,B产品的php文件同理。
swoole_get_license()函数可以返回这个php文件对应的授权文件的内容,在填写授权文件信息时候可以加自定义的k=>v对,这个函数会一并返回。
使用 Swoole Compiler 是否会降低性能
Swoole Compiler 不存在运行时解密还原 PHP源代码的逻辑,二进制目标文件只有经过处理的opcode二进制指令和内存数据,在第一次运行时将指令和数据载入内存,处理请求时没有任何性能消耗。
是否有绑定客户端机器Mac地址或域名功能
试用版本不支持此功能。正式版已经支持。
Swoole Loader 与 Opcache
Swoole Compiler 软件本身就是将PHP代码编译为经过特殊处理的opcode,所以使用Swoole Loader加载程序时,不需要其他OpCache扩展,包括opcache、apc、ZendGuardLoader、eAccelerator等扩展。
如果你的应用程序中,同时有加密代码和非加密代码。当swoole_loader发现是非加密代码时,会将编译控制权转给opcache,由opcache实现代码的加载。
加密器与ThinkPHP
tp会将一些php文件合并到一个runtime.php里面,这样如果其中一些加密了一些没加密,那么合并后的文件就无法正常运行。有3个解决方案
1修改Library/Think/Think.class.php注释掉生成runtime的地方。
2修改配置开启debug模式。
3整个项目不加密运行一下让框架生成runtime.php,然后加密的时候把这个runtime.php也一起加密
加密器与Composer
现代的php项目大部分都用composer做依赖管理,需要注意的是如果你的项目加密后执行composer install有可能出现问题,因为composer会分析你的项目所有的类并生成autoload_classmap.php。如果加密的代码composer是无法分析的,会导致无法加载类。 解决方案:先composer install 拉下来vender目录 再进行加密,加密的时候可以通过白名单来排除 vendor目录,或者连着vendor一起加密也可以(vendor非常大的话会比较慢)
关于文件软链接:
不要在项目中有软链接,否则在线加密会丢失文件,本地加密也会丢失软链(直接把软链接的文件当做了真实的文件).
无法兼容的情况--分析php文件:
symfony,swoft等框架的路由方式如果通过注释的方式是无法正确解析的,框架通过分析源码获得文件的命名空间,类名等信息,这些信息加密后都无法获得,验证方式:搜索框架源代码看有没有get_file_content,token_get_all等方法来解析php文件。
解决方案:只能兼容下,参考https://segmentfault.com/a/1190000019314415。
模板view文件如果有模板引擎的特殊标签也无法支持,因为模板引擎需要分析view的内容来解析替换,如果加密了就无法分析了,只能通过黑名单的方式排除 不要加密view
配置文件格式:
离线版在加密时指定了配置文件,但是却提示出错了:未找到,请检查swoole-compiler的安装情况,请确定改配置文件格式是否为Linux格式。
可能是在Windows下编辑上传到Linux,导致文件格式为DOS格式
本文链接:http://78moban.cn/post/8402.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!