使用screw plus来保护php代码安全-程序员宅基地

技术标签: php  代码加密  php screw  

https://github.com/del-xiong/screw-plus
http://git.oschina.net/splot/php-screw-plus

screw plus是一个开源的php扩展,作用是对php文件进行加密,网络上提供php加密的服务很多,但大多都只是混淆级别的加密,被人拿到加密文件问只要有足够耐心就能破解,与之不同的是,screw plus采用扩展来加解密,而且是全球金融业流行的高强度AES256加密,除非破解了服务器,否则黑客拿到了加密文件也只是一堆乱码。
同一个加密级别的有ioncube和官方的zend guard,但这两款都是收费的,一年至少数千元的费用并不值得普通开发者去尝试,而使用screw plus,你不需要多花一分钱。
下面以LNMP一键安装环境为例演示下screw plus的配置
首先克隆一份代码到服务器

git clone https://git.oschina.net/splot/php-screw-plus.git

进入项目目录,然后执行php的phpize文件,phpize是官方提供的可执行文件用于动态生成扩展开发环境,一般在php的bin目录下可以找到。lnmp的phpize在/usr/local/php/bin/phpize

/usr/local/php/bin/phpize
Configuring for:
PHP Api Version:        20100412
Zend Module Api No:      20100525
Zend Extension Api No:  220100525

执行成功后可以看到当前的php api版本,扩展api版本等。下一步就可以开始配置了。配置命令为 ./configure –with-php-config=[php-config], [php-config]一般也在php的bin目录下,写绝对路径就可以了。

./configure --with-php-config=/usr/local/php/bin/php-config

如果没报错,说明配置成功了,可以开始下一步编译了。
编译之前,我们可以修改加密的key,打开php_screw_plus.h可以看到开头就是 #define CAKEY “…” ,把里面的值改为一个足够复杂的key,最好16位以上,比如:9mqss6q7WsBpTMOZ

vi php_screw_plus.h

修改完毕之后,直接开始编译,执行make命令,如果最后显示Build complete.说明编译成功,扩展在modules里面,如果报错请根据提示进行修复,然后make clean之后重新编译。

make
...
Build complete.

上面我们编译的是解密程序,而加密程序也需要我们手动编译一下,进入tools目录执行make命令即可。如果没有报错,则扩展就全部编译完成了。

cd tools/
make

然后需要把扩展的路径加入到php.ini中,你可以把modules/php_screw_plus.so复制到php扩展目录也可以直接在ini中加入绝对路径,我一般倾向于绝对路径这样修改编译了扩展也不需要重新复制过去。

vi php/etc/php.ini

加入绝对路径例如

extension=/home/php_screw_plus-1.0/modules/php_screw_plus.so

然后重启php服务 这时可以放个php文件输出phpinfo信息,如果看到以下提示说明扩展生效了。
下面还有最后一步,加密程序。
在扩展的tools目录,执行./screw [路径],[路径]可以是单个文件也可以是文件夹,然后就可以实现加密了。
加密完成后查看源码,可以发现除了开头的几个英文字符外,其余的都成了乱码。
但是打开网站,php运行正常,如同没有加密一样。经过测试,解密速度大约为100M每秒,对php自身的性能损失非常小,一般不到20毫秒。
screw plus还有个功能,可阻止执行未经许可的php文件,这样黑客就算上传了代码也然并卵。
同样在php_screw_plus.h里修改,把STRICT_MODE后面的值改为1,然后make clean && make重新编译并重启php,然后打开之前加过密的网站,执行正常,但是我们随意上传个明文的php文件,结果是一片空白。
原因是未加密的php文件头部不包含识别key,扩展会返回空内容,就算黑客获取了key并加入也没用,内容会被解密成乱码仍然无法执行。经过screw plus的保护,即使网站整站被下载或被上传了恶意代码,也无法对网站造成损失。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bupt073114/article/details/81713985

智能推荐

socket 通讯检测客户端非正常断线。_socketrunnable::clientdisconnect-程序员宅基地

文章浏览阅读3.8k次。package com.ist.socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import java.io.File;import java.io.FileOutputStream;import java.io.IOExc_socketrunnable::clientdisconnect

LVGL|lvgl v8教程(lvgl中文文档学习教程,开始更新lvgl v8.x文档教程,超详细)_lvgl 8 文档-程序员宅基地

文章浏览阅读5.1w次,点赞40次,收藏296次。lvgl v8.x版本文档教程。lvgl官方的教程是英文的,这个是我在做项目时根据lvgl官方文档做出来的lvgl中文文档(持续更新维护),不仅仅只是生硬照搬lvgl官方文档的翻译,同时总结了我们在实际开发中遇到的各种细节,让这个文档更加适合我们在实际开发中的需求。_lvgl 8 文档

html滑动模块,博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)-程序员宅基地

文章浏览阅读1.2k次。当一个页面内容很长的时候,侧边栏栏目可能显得太短,当窗口滑动到靠下的位置,则侧边即失去了展示内容的机会。很多新闻资讯类网站如新浪、网易、CSDN等,会在边栏的右下角以固定的小弹窗形式,以提供更多的内容展示方式,但这并不适合博客和web2.0风格的网站。现在很多的独立博客和网站如人人网等,都使用了让侧边栏模块随滚动条滑动而位置固定的效果。就是当一个页面很长的时候,设定侧栏内容会跟随滚动条,这种效果适..._web前端设计如何使状态栏随滚动条一起滑动

污水处理站监控系统-程序员宅基地

文章浏览阅读61次。智慧污水处理远程监控系统实现了对污水处理的各个环节进行监控,将污水处理厂的水量、水位、水质以及设备状态等信息通过物联网上传至云端,并且可以远程监控数据、对数据进行分析,处理,实现污水处理生产过程的实时控制与精细化管理,进一步规范了管理,提高了工作效率。

使用Amplify Shader Editor优化特效Shader-程序员宅基地

文章浏览阅读924次。ASE相对于Shader Forge生成的代码更加干净, 用于制作特效的再合适不过,以下是使用ASE优化一个SF制作特效的经过: ## 分析美术用SF制作的Shader 懒得装SF, 直接分析代码可知这个溶解效果大致有以下部分组成:使用Grab的扭曲4个Step指令 + 3个lerp指令组成的溶解时间变量控制的UV动画2张贴图 + N个uniform变量..._amplify shader editor 与 shader graphics

C++ 生成dll时没有顺带生成lib的原因_c++生成dll的同时没有lib-程序员宅基地

文章浏览阅读3.5k次。C++ dll库只生成dll文件,而未生成lib文件,问题在于没有在接口函数前面加上前缀__declspec(dllexport)在VS的工程中,此前缀常常被宏定义为:工程名_API#ifdef RADONCUDA_EXPORTS#define RADONCUDA_API __declspec(dllexport)#else#define RADONCUDA_API __declspec..._c++生成dll的同时没有lib

随便推点

Python:study day 01-程序员宅基地

文章浏览阅读769次,点赞18次,收藏22次。Python变量和简单的数据结构

SSLOJ1407 【树】哈夫曼树(一)_题目二树的操作 2、假设用于通讯的电文仅有7个字母组成,字母在电文中出现的频-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏12次。Description假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为7、19、2、6、32、3、21、10。试为这8个字母设计哈夫曼编码。如果用二进制数表示这8个字母的编码方案.(请按照左子树根节点的权小于等于右子树根节点的权的次序构造)Input第一行为字母的个数n;第二行至第n+1行分别为各个字母在电文中出现的频率;Output按照中序遍历输出各个编码Sample Input8719263232110Sample Output19:0021:01_题目二树的操作 2、假设用于通讯的电文仅有7个字母组成,字母在电文中出现的频

celeste mod如何安装_celeste olypus 无法下载everest-程序员宅基地

文章浏览阅读232次。下载olympus_a8ef3.exe,打开olympus,点击everest,点击manage自己定路径(steam端会给你定好)然后点击右边绿条(stable)然后点击install,点击everest运行游戏然后就会出现mod选项,到时候就可以下载mod。2如果olympus不行,那么你就用下面的everesteinstaller_dec39.exe,下载并运行,点击上方的【.】定路径,然后点击install下完后进入游戏,如果也有mod选项,也可以下mod。以后我会推荐mod,尽情期待~~~~_celeste olypus 无法下载everest

小韦老师@神犇营-USACO1.3.2-修理牛棚_c++ usaco 修理牛棚-程序员宅基地

文章浏览阅读228次。小韦老师@神犇营-USACO1.3.2-修理牛棚题目:描述题意:在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 这些牛在互相挨着的排成一排的牛棚中过夜。 有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,农民约翰必须尽快在牛棚之前竖立起新的木板。 他的新木材供应商将会供应他任何他想要的长度,但是供应商只能提供有..._c++ usaco 修理牛棚

Flask 使用 request 处理GET POST请求、上传文件_request.files.get-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏23次。在Django框架开发中,request对象就是用来处理GET\POST请求的关键对象,而Flask框架也是一样的。下面来看看request对象的常用方法。request对象的常用方法request对象的导入:from flask import requestFlask 框架中的 request 对象保存了一次HTTP请求的一切信息。那么这个HTTP请求中可能会是GET..._request.files.get

vue实现的分段式进度条(步骤条结合进度条)_vue分段式进度条-程序员宅基地

文章浏览阅读8.2k次,点赞8次,收藏52次。作为一个前端初学者,公司项目中前端需要一个带分步式的进度条,查查Element-ui和Ant design Vue都只有_vue分段式进度条