- Автор темы
- #1
да, дыру)
Ткните пожалуйста, где брешь?
Проблема в том что каким-то образом можно загрузить вместо изображения .php файлы, ну шелл вообщем... да и не только я думаю))
Полагаю что проверка не работает или работает неверно..
Загрузка изображения на сервер: изображение загружается в папку pics, его миниатюра в thumbs
Ткните пожалуйста, где брешь?
Проблема в том что каким-то образом можно загрузить вместо изображения .php файлы, ну шелл вообщем... да и не только я думаю))
Полагаю что проверка не работает или работает неверно..
Загрузка изображения на сервер: изображение загружается в папку pics, его миниатюра в thumbs
PHP:
function findExtension ($filename)
{
$filename = strtolower($filename) ;
$exts = split("[/\\.]", $filename) ;
$n = count($exts)-1;
$exts = $exts[$n];
return $exts;
}
function imagecreatefromunknown($path) {
$ext = findExtension($path);
switch ($ext) {
case "jpg":
$img = imagecreatefromjpeg($path);
break;
case "gif":
$img = imagecreatefromgif($path);
break;
case "png":
$img = imagecreatefrompng($path);
break;
}
return $img;
}
if ($session == false){
$max = 5;
$total = 0;
}else{
$max = 10;
$total = 0;
}
if (isset($_POST["tags1"])) {
for ($i=1; $i < ($max+1); $i++)
{
if (trim($_FILES["image" . $i]["name"]) != "") {
$total = $total + 1;
if ( (trim($_POST["tags" . $i]) != "") ) {
$tags = htmlspecialchars(trim($_POST["tags" . $i]));
$name = "image" . $i;
if (( ($_FILES[$name]["type"] == "image/gif")
|| ($_FILES[$name]["type"] == "image/jpeg")
|| ($_FILES[$name]["type"] == "image/pjpeg")
|| ($_FILES[$name]["type"] == "image/x-png")
|| ($_FILES[$name]["type"] == "image/bmp")
|| ($_FILES[$name]["type"] == "image/png")))
{
$size = ceil(intval($_FILES[$name]["size"])/1024);
if ($session == true)
$limit = (1000*$maxsizemember/10);
else
$limit = (1000*$maxsizeguest/10);
echo "Размер Вашего изображения: ".$size." Kb<br>";
if ($size > $limit)
die ("Превышает установленный максимальный лимит - ".$limit." Kb.");
if ($_FILES[$name]["error"] > 0) {
die("Ошибка: " . $_FILES[$name]["error"]);
}
else {
$n = $_FILES[$name]["name"];
$rndName = md5($n . date("d-m-y") . time()) . "." . findExtension($n);
$uploadPath = "pics/" . $rndName;
$tempPath = $_FILES[$name]["tmp_name"];
move_uploaded_file($tempPath, $uploadPath);
}
}
else
die("Ошибка! \"{$_FILES[$name]["name"]}\" неверный формат изображения.");
$imagePath = $uploadPath;
$img = imagecreatefromunknown($imagePath);
$mainWidth = imagesx($img);
$mainHeight = imagesy($img);
if (($mainWidth > 99) && ($mainWidth < 4000) && ($mainHeight < 3200))
{
$a = ($mainWidth >= $mainHeight) ? $mainWidth : $mainHeight;
$div = $a / 99;
$thumbWidth = intval($mainWidth / $div);
$thumbHeight = intval($mainHeight / $div);
$myThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
imagecopyresampled($myThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $mainWidth, $mainHeight);
$thumbPath = "thumbs/" . basename($imagePath);
imagejpeg($myThumb, $thumbPath);
if ( ($type == "public") && !empty($_POST["wm"]) ) {
$imgMark = imagecreatefromgif("watermark.gif");
$dX = $mainWidth - imagesx($imgMark);
$dY = $mainHeight - imagesy($imgMark);
imagecopymerge($img, $imgMark, $dX, $dY, 0, 0, imagesx($imgMark), imagesy($imgMark), 40);
$ext = findExtension($imagePath);
switch ($ext) {
case "jpg":
imagejpeg($img, $imagePath); break;
case "png":
imagepng($img, $imagePath); break;
}
}
$details = intval(filesize($imagePath) / 1024) . " kb (" . $mainWidth . " x " . $mainHeight . ")";
$id = md5($thumbPath . date("d-m-y") . time());
...................................
...................................
...................................
...................................