自PHP 5.3.0起默认启用SQLite3扩展,但是由于SQLite 3 开源版不带加密功能,如果想使用加密功能需要用他的商业版本。这导致PHP默认的SQLite扩展本身是不支持加密功能,只预留了相关的接口,详见官方文档介绍:
An optional encryption key used when encrypting and decrypting an SQLite database. If the SQLite encryption module is not installed, this parameter will have no effect.
但是如果项目需要用到SQLite,如果不加密,对安全多多少少有一点影响。还好SQLite本身有预留加密的接口,许多爱好者就基于这个接口,实现了加密功能。
目前比较有知名度的分别是:wxsqlite3和sqlcipher,其中sqlcipher官方有文档介绍如何实现php的加密SQLite3扩展,而wxsqlite3没有,不过目前知名的数据库管理工具Navicat使用的是wxsqlite3的库实现SQLite3的加密连接,所以为了后续维护的方便,故打算使用wxsqlite3。
扩展编译教程
首先你需要确保你没有将SQLite3扩展加入php主程序(编译时使用 --without-sqlite3 禁用 SQLite3 扩展),万一不幸加入了,我目前也不知道有什么好办法,感觉重新编译一下就好了。
到php官网下载相对应的php版本源码(本文以php-7.0.17为例)。
将下载的源码包放到root目录,并解压
tar -zxf php-7.0.17.tar.gz
进入SQLite3扩展源码目录
cd php-7.0.17/ext/sqlite3
将wxsqlite3源码里的 sqlite3secure/src 的所有文件拷贝进 /root/php-7.0.17/ext/sqlite3/libsqlite 生成并编辑预编译配置文件
cp config0.m4 config.m4
vi config.m4
将config.m4里的 sqlite3_extra_sources="libsqlite/sqlite3.c" 替换成 sqlite3_extra_sources="libsqlite/sqlite3secure.c" 生成预编译文件
phpize
预编译
./configure CFLAGS="-DSQLITE_HAS_CODEC"
编译并安装
make && make install
最后在php.ini里加载编译好的so文件即可,这时php就支持加密版本的SQLite3啦,么么哒。
来源:oschina
链接:https://my.oschina.net/u/924096/blog/2963127