淺談web上存漏洞及原理分析、防範方法

來源:互聯網
上載者:User

 1、檢測檔案類型,並且用使用者上存檔案名稱儲存

 代碼如下:if(isset($_FILES['img'])){$file = save_file($_FILES['img']);if($file===false) exit('上存失敗!'); echo "上存成功!",$file;}function check_file($img){///讀取檔案if($img['error']>0) return false; $tmpfile = $img['tmp_name'];$filename = $img['name'];  ///讀取副檔名$len=strrpos($filename,".");if($len===false) return false; //得到副檔名$ext = strtolower(substr($filename,$len+1));if(!in_array($ext,array('jpg','jpeg','png'))) return false;return true;}function save_file($img){if(!check_file($img)) return false; //格式檢測ok,準備移動資料$filename = $img['name'];$newfile = "upload/" .$filename;if(!move_uploaded_file($img["tmp_name"],$newfile)) return false; return $newfile;}?> 以上代碼,對輸入類型也做了判斷,看了沒有問題。但是問題,確恰恰出現在對擷取的使用者名稱變數檢測上面。直接擷取傳入使用者名稱,然後存為檔案。 有朋友會說:這些檔案名稱都是我電腦裡面存在的,檔案名稱格式都受限於作業系統對檔案名稱定義。 但是,需要注意是,對於$_FILES裡面擷取變數,是直接來自http request請求。它跟普通擷取其它get,post變數一樣。 因此,別有用心的人,往往會自己類比瀏覽器,給伺服器發送一個特殊檔案名稱。然後,讓存檔案時候,能夠正常儲存為自己格式。 前些年,”” 在字串中,儲存為檔案,會自動截斷後面內容。 如:$filename 構造為:”a.php.jpg” ,我們想想,將會變成怎麼樣?$newfile = “upload/a.php.jpg” 因為,對副檔名驗證,最右邊”.”後面字元是jpg ,是允許圖片格式。 但是,我們一以該檔案名稱,儲存。 發現磁碟會在upload目錄下面產生a.php ,後面所有字元,被自動截斷。 該漏洞,風靡一時。當時幾乎大多數上存網站都有漏洞。一時,很多平台關閉了上存。其實,根本原因就在此。我們拿到檔案名稱,自己作為最終組建檔案名儲存了。 好的方法,是自己隨機組建檔案名+讀取副檔名 。這樣可以組織輸入特殊字元,在進行檔案儲存時候,被拋棄或截斷了。 php4時代這個漏洞可以利用,到php5時代,產生的變數檔案名稱值中,會自動過濾掉”” ,這樣無論使用者構造怎麼樣的特殊””使用者名稱,都會被截斷。 但是 ,目前這類漏洞,在asp,jsp 等網站。還經常有出現。老版本的php網站也會經常出現。  
相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。