Eskiden kullandığım ufak bir fonksiyon, örrnek olması amacıyla bırakayım.
public function imageUpload(){
$query = $this->db->prepare("SELECT * FROM limits WHERE id=1");
$query->execute(array());
$limits != null ? $query->fetch(PDO::FETCH_ASSOC) : 7;
$image = new Bulletproof\Image($_FILES);
$upname = $image->getName();
$svname = hash('sha512', date("d-m-Y H:i:s", time())).rand(222, 222222);
preg_match_all('/[0-9]+/', $limits['max_up_file_resolution'], $matches, PREG_SET_ORDER);
$maxwidth = $matches[0][0];
$maxheight = $matches[1][0];
$image->setName($svname)
->setLocation(__DIR__ . "/../../uploads")
->setMime(array('png', 'jpg', 'jpeg', 'gif'))
->setDimension($maxwidth, $maxheight)
->setSize('1', $limits['max_up_file_size']);
if($image["pictures"]){
if($image->upload()){
$query = $this->db->prepare("INSERT uploads SET userid=:userid, date=:date, ip=:ip, upname=:upname, svname=:svname, ext=:ext, size=:size, resolution=:resolution");
$addvalue = $query->execute(array(
"userid" => $this->common->post('userid'),
"date" => date("d-m-Y H:i:s", time()),
"ip" => $this->getIP(),
"upname" => $upname,
"svname" => $svname,
"ext" => $image->getMime(),
"size" => $image->getSize(),
"resolution" => $image->getWidth().'x'.$image->getHeight()
));
if ($addvalue)
return true;
else
return false;
} else{
return $image["error"];
}
}
}
Görüldüğü üzere dosya ismi değiştirilmesi önemli, en azından saldırgan sonraki adımı resmin yeni ismini öğrenmek olacaktır. Biraz terletmek için.
Resimlerin yüklendiği veya kullanıldığı klasörler için .htaccess ile belirli sınırlamalar getirilmeli, çalıştırılabilir dosyalara izin verilmemeli, mesela PHP veya flash içerikli dosyalar.