標(biāo)題有點(diǎn)大,當(dāng)我們仔細(xì)分析后,實(shí)際上一般都是配置問(wèn)題。 如果有人想攻擊服務(wù)器時(shí),都會(huì)掃描機(jī)器哪里有漏洞可以上傳惡意腳本文件,上傳腳本是第一步, 當(dāng)惡意的php腳本被上傳到服務(wù)器時(shí)(其后綴可能是php,也可能偽裝如jpg等其它后綴), 如果該腳本能被解析執(zhí)行,那想攻擊者就可以為所欲為了。 那從源頭上來(lái)避免這個(gè)問(wèn)題可以從如下兩方面入手: 1.上傳前就應(yīng)該判斷文件不能是php腳本文件,如果是不能允許其上傳(包括偽裝后綴的)。 2.上傳后就應(yīng)該把上傳的附件文件單獨(dú)放在一個(gè)服務(wù)器,該機(jī)器只做靜態(tài)解析,就沒(méi)什么問(wèn)題了。 第一條需要寫(xiě)程序保證,沒(méi)什么說(shuō)的,最簡(jiǎn)單的判斷文件后綴,到file判斷文件類型,或者再?gòu)?fù)雜的,大家可以去網(wǎng)上找。 第二條解決起來(lái)可能礙于資源有限,也不好辦。那如果沒(méi)條件只有一臺(tái)機(jī)器的話,是不是只能人為刀俎,我為魚(yú)肉了呢。 其實(shí)也可以從配置上去避免, 禁止ngingx解析上傳目錄中的php文件。 location ~* ^/upload/.*\.(php|php5)($|/) { deny all; } 避免偽裝其它后綴的腳本執(zhí)行 比如: 通過(guò)某種方法上傳了偽裝文件,upload下存在一個(gè)偽裝成圖片的php腳本a.jpg, 那么當(dāng)使用http://www.nginx.cn/upload/a.jpg/b.php訪問(wèn)時(shí), 如果不做特殊設(shè)置傳給CGI執(zhí)行的SCRIPT_FILENAME就是$root/upload/a.jpg/b.php 當(dāng)設(shè)置了cgi.fix_pathinfo = 1時(shí),PHP就會(huì)以'/'為分割符從最后一個(gè)文件開(kāi)始向前找存在的文件去執(zhí)行。 $root/upload/a.jpg/b.php $root/upload/a.jpg 最終偽裝腳本將會(huì)被執(zhí)行。 解決方法: 1.關(guān)閉cgi.fix_pathinfo 設(shè)置成 cgi.fix_pathinfo = 0,但是會(huì)影響使用PATH_INFO進(jìn)行rewrite的程序。 2. 代碼如下: location ~* .*\.php($|/) { if ($request_filename ~* (.*)\.php) { set $php_url $1; } if (!-e $php_url.php) { return 403; } } |
免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷(xiāo)服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!
掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信