Decimas adlı üyeden alıntı

Regex ile dosya uzantısı mı kontrol ediyorsun, bu zamanda kimse direkt çalıştırılabilir bir dosya yüklemez :D virüs.jpg ama arkaplanda virüs.php gömülü olabilir, resim çağrıldığı an puff. PHP'de bu tip durumları daha derinden mime type denen kavrama yaklaşarak çözmek gerek. Extension değil dosya içeriği, formatı önemli. Örneğin şu küçük kütüphane güzel bir örnek.

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.


Cevabın için teşekkürler.

Resim(png) olayını örnek verdiğim siteme yüklenen dosyalar daha farklı .txt .wad gibi 8-9 çeşit dosya yükleniyor.

Söylediğin benimde aklımdan geçmişti örnek olarak; .wad içerisinde sisteme enjekte edeceği bir kod varsa ne yapacağım diye ama bir türlü bu konu hakkında çözüm bulamadım ?

Aklıma bir yol geldi sadece .htaccess dosyasında sadece benim belirttiğim .php dosyalarının işleme alınması gibi ? (böyle bir işlem yapılabiliyormu bilmiyorum)

Fakat .so gibi sistem dosyalarını yüklerse sistemi kontol edebilecek bu sefer :)
Arada derede kaldım :D

Bununla ilgili bir çözüm varmıdır ?