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