文件上傳的攻擊方式php
1、JS檢測繞過html
一、使用瀏覽器插件,刪除檢測文件後綴的js代碼,而後上傳文件便可繞過瀏覽器
二、先把須要上傳的文件後綴改爲容許上傳的格式,經過js校驗,抓包把後綴名改成可執行文件的後綴上傳實現繞過服務器
2、文件後綴繞過函數
Apache的解析順序是從右到左解析文件後綴的,若是最右側的擴展名不可識別,繼續往左判斷,直到遇到能夠解析的擴展名爲止。網站
好比:xxx.xls.xxx.xxx.xxx 由於後綴xxx不能夠解析,因此向左解析後綴,最後解析出來是一個Excel表格插件
看道哥那本書上寫的是在1.x,2.x版本下有這個解析問題,如今使用的都是6,7甚至更高版本htm
3、文件類型繞過圖片
若是服務器代碼是經過Content-Type的值來判斷文件的類型,那麼就存在被繞過的可能。文件上傳
Content-Type的值是客戶端傳遞的,是能夠任意修改的。
4、文件截斷繞過
%00表明結束符,有可能會把後邊的字符刪掉。
http://www.xxx.xom/jieshu=111
把111改成 1.php%00a.jpg,文件被保存到服務器時,%00會把「a.jpg」截斷,保存到服務器的是1.php
5、競爭條件攻擊
一些網站是先容許上傳任意文件,而後檢查上傳文件是否包含特殊腳本,若是有則刪除文件。這就存在上傳和檢驗的時間差問題。
能夠事先寫好 一句話,還沒校驗完成程序讀取來內容就直接給我返回。
6、文件內容繞過
前256個字節是合規的,在後邊加上可攻擊腳本
修復方案
一、文件上傳的目錄設置爲不可執行,去掉x
二、判斷文件類型,建議使用白名單的形式,對於圖片的處理可使用壓縮函數或者resize函數,處理圖片的同時破壞圖片中可能包含的html代碼
三、使用隨機數改寫文件名和文件路徑
四、單獨設置文件服務器域名(若是有條件),因爲瀏覽器的同源策略一系列客戶端攻擊將失效。