php是解释性语言,不需要编译。对于用php写的产品,如果需要直接源码安装到客户的运行环境中,则存在很大的安全隐患。客户甚至可以把你的产品直接做二次部署或者销售。目前我们公司就遇到这个问题。
1. 利用zend guard
Zend Guard不仅可以实现对PHP应用的脚本进行加密保护和对PHP应用的产品进行商业许可证管理,还可以为许多软件生产商、IT服务提供商提供完善的加密和安全的产品发布系统。(摘自百度百科) 虽然zend guard 能增加一定的安全性,但是网上zend guard解码工具一大堆,zend guard只能做最基本的防护。2.开发php扩展
php是用C语言实现的,php流行的很大一个原因也是因为有大量开发者通过扩展实现大量通用的功能供广大社区开发者使用。php扩展开发的意义和好处,鸟哥也在其博客中有过阐述:3、公司产品的分析进行php扩展开发,首先需要有不错的C/C++基础,同时也需要熟悉php扩展API。有一定的技术门槛,同样对于一个以php为主要技术栈的初创性公司来说,需要考虑技术和时间成本。
php扩展化的优势:
产品安全性和私密性好
系统性能高
php扩展化的劣势:
开发效率低 php的优势之一就是开发效率高,需要选择系统合适的模块进行扩展化。
维护成本高 越多的模块扩展化,则要求团队中需要更多的人即熟悉C 又懂php,人力成本也将增大,同时,因为扩展需要编译,调试和bug修复的成本也将增大。
通过讨论和分析我们目前产品的情况,如图所示:
思路:
我们首要目标是保证产品系统的隐私性,即我们会在扩展中对用户的一些信息和权限进行校验。同时,为了保证用户不能绕过我们的校验,则需要扩展中的功能是系统必须的,用户如果需要重写,需要很大的成本。a、起初,讨论过程中,大家的意见都是建议尽量少的代码改动,把入口进行扩展化。但是我们目前系统是基于yii开发的,如果更改yii框架中的入口内容,这样做无法解决问题:1、对于熟悉yii框架的开发人员来说,他可以轻易绕过你的扩展内容。2、不利用后续yii框架的升级。
b、第二种方案配置文件扩展化,第一反应,把配置文件放在扩展中,如果去掉扩展,系统就无法正常运行。但是,仔细思考后,就发现,无论配置信息本地加密,还是通过扩展远程获取,最终通过调试,都能在程序中获得配置的具体信息,这样就能直接绕过我们的扩展,即我们的校验就无效了。c、最后我们决定,将基础服务部分的内容进行扩展化。这样既能不影响容易变更的业务逻辑的开发效率,同时也增加了系统的隐私性和基础服务的效率。扩展化的服务越多,用户需要破解和覆盖的功能越多,用户的开发成本就越大。