那要怎麼樣讓你的檔案上傳功能強化呢?起碼不要讓別人有機會上傳 Web Shell 到你的網站,這邊介紹幾個方法給大家:
在撰寫檔案上傳功能的時候,通常都會預設一個上傳資料夾,對於這個資料夾的權限要相當注意,最重要的就是不能擁有執行 .php 的權限,只要這邊設定正確,就算 Web Shell 被上傳了,不能執行也沒有。
[shell]vim uploadfile/.htaccess
[vim][/vim]
order allow,deny
deny from all
[com]在你的 upload file 裡面設定 .htaccess[/com]
針對上傳檔案使用 resize() 函數,在處理圖片的同時可以順便破壞偽冒圖片的 HTML 結構。
<?php
// 傳上來的檔案
$filename = 'test.jpg';
// resize 的比例,若只是要破壞結構,可以維持比例 1.0
$percent = 0.5;
// 取得原本圖片長與寬的尺寸
list($width, $height) = getimagesize($filename);
// 取得新的尺寸
$newwidth = $width * $percent;
$newheight = $height * $percent;
// 載入
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
// resize 重新定義尺寸
/* 參數順序 ( 新圖片、舊圖片、新圖片的距離起始點的 x 座標、新圖片的距離起始點的 y 座標、
舊圖片的距離起始點的 y 座標、舊圖片的距離起始點的 y 座標、新圖片的長、新圖片的寬、
舊圖片的長、舊圖片的寬)*/
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//設定圖檔的檔名,由uniqid + rand(10000-99999) 組成
$FileName = uniqid() . rand(10000,99999) . ".jpg";
//修改圖檔路徑
$ImagePath = dirname(__FILE__) . "/uploadimages/" . $FileName;
//將檔案儲存至資料夾
imagejpeg($thumb, $ImagePath);
?>