使用screw plus來保護php程式碼安全
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的保護,即使網站整站被下載或被上傳了惡意程式碼,也無法對網站造成損失。
作者:放開那頭熊
連結:https://www.jianshu.com/p/f6425e2f8643
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。