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