<?php @eval($_POST[value]);?>
php語言無需編譯,動(dòng)態(tài)執(zhí)行,我們不得不佩服它的開發(fā)效率。但正因?yàn)榭梢詣?dòng)態(tài)執(zhí)行,才帶來了類似一句話木馬等安全問題。因?yàn)槲覀円志瑁駝t,無論做的再好,都將“滿盤皆輸”。
首選,我們要先弄清楚,一句話木馬是如何被植入到系統(tǒng)的,基本存在通過一下幾種方式:
- 利用sql注入。sql注入可以通過MySQL pdo的預(yù)處理來解決。
- 利用配置上的漏洞,偽造一張圖片,其實(shí)是可執(zhí)行的代碼,然后偽造一條地址,類似http://phpvim.net/foo.jpg/a.php。當(dāng) php.ini 中 cgi.fix_pathinfo = 1 時(shí),PHP CGI 以 / 為分隔符號(hào)從后向前依次檢查如下路徑,直到找個(gè)某個(gè)存在的文件,如果這個(gè)文件是個(gè)非法的文件,so… 悲劇了~。所以對于使用php-fpm<0.6的務(wù)必關(guān)閉關(guān)閉該選項(xiàng),設(shè)置 cgi.fix_pathinfo = 0。
- 利用php框架的漏洞,就比如之前thinkphp暴露出來的一樣,沒有對controller進(jìn)行正則判斷,結(jié)果就被利用了,“黑客”利用該漏洞,傳輸一個(gè)函數(shù)名字,控制后臺(tái)執(zhí)行該函數(shù),如果該該函數(shù)為file_put_contents,一句話木馬:<?php @eval($_POST[value]);?>就很容易被植入到服務(wù)器上。剩下的就不用說了。
那么我們該怎么防范呢?其實(shí)無論我們有多小心,還是無法百分百確保安全。在這里我提供一種簡單有效的方法供大家參考。
第一步,固定PHP的訪問入口,如果是index.php,Nginx的配置如下:
#只允許index入口 location ~ .*/index.php { } #其它php文件入口直接拒絕訪問 location ~* .*.php { deny all; }
這樣可以保證,就算一句話木馬被植入了,它沒有執(zhí)行的機(jī)會(huì)。
第二步,修改入口文件的屬性,保證入口文件不被篡改。
chattr +i index.php
第三部,PHP安全配置容易忽視的問題
以上供大家參考,不知道大家有沒有更好的解決辦法,歡迎一起討論~