php語言無需編譯,動態執行,我們不得不佩服它的開發效率。但正因為可以動態執行,才帶來了類似一句話木馬等安全問題。因為我們要十分警惕,否則,無論做的再好,都將“滿盤皆輸”。
首選,我們要先弄清楚,一句話木馬是如何被植入到系統的,基本存在通過一下幾種方式:
1、利用sql注入。
sql注入可以通過mysql pdo的預處理來解決。
2、利用配置上傳的漏洞
偽造一張圖片,其實是可執行的代碼,然后偽造一條地址,類似http://php.net/foo.jpg/a.php。當 php.ini 中 cgi.fix_pathinfo = 1 時,PHP CGI 以 / 為分隔符號從后向前依次檢查如下路徑,直到找個某個存在的文件,如果這個文件是個非法的文件,so… 悲劇了~。所以對于使用php-fpm<0.6的務必關閉關閉該選項,設置 cgi.fix_pathinfo = 0。
3、利用php框架的漏洞
就比如之前thinkphp暴露出來的一樣,沒有對controller進行正則判斷,結果就被利用了,“黑客”利用該漏洞,傳輸一個函數名字,控制后臺執行該函數,如果該該函數為file_put_contents,一句話木馬:<?php @eval($_POST[value]);?>就很容易被植入到服務器上。剩下的就不用說了。
那么我們該怎么防范呢?其實無論我們有多小心,還是無法百分百確保安全。在這里我提供一種簡單有效的方法供大家參考。
第一步,固定PHP的訪問入口,網站唯一請求入口
如果是index.php,nginx的配置如下:
#只允許index入口 location ~ .*/index\.(php)$ { } #其它php文件入口直接拒絕訪問 location ~* .*\.(php)$ { deny all; }
這樣可以保證,就算一句話木馬被植入了,它沒有執行的機會。
第二步,修改入口文件的屬性,保證入口文件不被篡改。
chattr +i index.php
兩步,既保證了入口文件不能被修改,又使木馬文件失去了執行的機會。