起步-学习php扩展开发的背景

ByteLuminaPro
• 阅读 1893

php是解释性语言,不需要编译。对于用php写的产品,如果需要直接源码安装到客户的运行环境中,则存在很大的安全隐患。客户甚至可以把你的产品直接做二次部署或者销售。目前我们公司就遇到这个问题。

1. 利用zend guard
Zend Guard不仅可以实现对PHP应用的脚本进行加密保护和对PHP应用的产品进行商业许可证管理,还可以为许多软件生产商、IT服务提供商提供完善的加密和安全的产品发布系统。(摘自百度百科)
虽然zend guard 能增加一定的安全性,但是网上zend guard解码工具一大堆,zend guard只能做最基本的防护。

2.开发php扩展
php是用C语言实现的,php流行的很大一个原因也是因为有大量开发者通过扩展实现大量通用的功能供广大社区开发者使用。php扩展开发的意义和好处,鸟哥也在其博客中有过阐述:用C/C++扩展你的PHP
3、公司产品的分析

进行php扩展开发,首先需要有不错的C/C++基础,同时也需要熟悉php扩展API。有一定的技术门槛,同样对于一个以php为主要技术栈的初创性公司来说,需要考虑技术和时间成本。

php扩展化的优势:

  • 产品安全性和私密性好

  • 系统性能高

php扩展化的劣势:

  • 开发效率低 php的优势之一就是开发效率高,需要选择系统合适的模块进行扩展化。

  • 维护成本高 越多的模块扩展化,则要求团队中需要更多的人即熟悉C 又懂php,人力成本也将增大,同时,因为扩展需要编译,调试和bug修复的成本也将增大。

通过讨论和分析我们目前产品的情况,如图所示:

起步-学习php扩展开发的背景
起步-学习php扩展开发的背景

思路:
我们首要目标是保证产品系统的隐私性,即我们会在扩展中对用户的一些信息和权限进行校验。同时,为了保证用户不能绕过我们的校验,则需要扩展中的功能是系统必须的,用户如果需要重写,需要很大的成本。

a、起初,讨论过程中,大家的意见都是建议尽量少的代码改动,把入口进行扩展化。但是我们目前系统是基于yii开发的,如果更改yii框架中的入口内容,这样做无法解决问题:1、对于熟悉yii框架的开发人员来说,他可以轻易绕过你的扩展内容。2、不利用后续yii框架的升级。
b、第二种方案配置文件扩展化,第一反应,把配置文件放在扩展中,如果去掉扩展,系统就无法正常运行。但是,仔细思考后,就发现,无论配置信息本地加密,还是通过扩展远程获取,最终通过调试,都能在程序中获得配置的具体信息,这样就能直接绕过我们的扩展,即我们的校验就无效了。

c、最后我们决定,将基础服务部分的内容进行扩展化。这样既能不影响容易变更的业务逻辑的开发效率,同时也增加了系统的隐私性和基础服务的效率。扩展化的服务越多,用户需要破解和覆盖的功能越多,用户的开发成本就越大。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
PHP 代码加密面面观
时代在发展,在PHP平台上开发的开发者越来越多。“天下熙熙,皆为利来;天下攘攘,皆为利往”,许多开发者使用PHP开发他们的商业产品,并将其进行二次分发。可惜由于PHP的机制受限,开发者们只能分发源代码,这对他们的版权保护极为不利,导致PHP界涌现出了不少加密产品。笔者最近想了想,在这里对这些加密产品进行逐项介绍,以飨各位读者。如果你没有任何技术背景,笔者
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
!(https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png)PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所.<?php$apparray('db_prefix''
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这