Титла: Малко помощз за upload скирпт на php
Публикувано от: toti84 в May 20, 2008, 12:52
Здравейте, В момента скрипта ми работи иделано, но ми трябва да го моделирам така, че когато файла се качи на сървъра, да бъде с променено име, което име да се определя от някаква променлива (примерно $ime). Ето и как изглеждат: index.html: Примерен код | <html> <body>
<form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form>
</body> </html> |
и upload_file.php:
Примерен код | <?php
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?> |
Благодаря предварително...
Титла: Малко помощз за upload скирпт на php
Публикувано от: VladSun в May 20, 2008, 13:30
 Използвай $ime за втори параметър на move_uploaded_file() Кодът ти обаче е *доста* зле откъм сигурност: - не си използвал is_uploaded_file() за да провериш дали не се мести примерно "/etc/passwd" в уеб директорията  Не че ще стане, но предпочитам да те поуплаша  - проверката за типа на файла (image/gif и т.н.) се осланя на подадена от потребителя информация, която *много* лесно може да бъде променена; - никога не използвай оригиналното име, особено когато не си го "изчистил" от специални стрингове (от сорта на .. или /)  Ако в момента използваш този скрипт, то знай, че си отворен към атаки. Един вариант е да използваш getimagesize() за да провериш дали качваният файл е изображение (макар и там да имаше начини да се качи PHP).
Титла: Малко помощз за upload скирпт на php
Публикувано от: toti84 в May 20, 2008, 14:09
Благодаря за бързия отговор, но се получава малка засечка: 1, Успешно се слага друго име, но не мога да се оправя с раширенята (примерно .gif) ета как го правя: Примерен код | $ime=33.gif; . . move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/htdocs/upload/" . $ime]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; . . |
на сървъра името е "33gif"
Цитат | - проверката за типа на файла (image/gif и т.н.) се осланя на подадена от потребителя информация, която *много* лесно може да бъде променена; | Просто този файл е примерен, аз ще се опивам да качвам ".swf"
Цитат | - никога не използвай оригиналното име, особено когато не си го "изчистил" от специални стрингове (от сорта на .. или /)  |
Тук не мога да те разбера...
Цитат | - не си използвал is_uploaded_file() за да провериш дали не се мести примерно "/etc/passwd" в уеб директорията Не че ще стане, но предпочитам да те поуплаша  |
Тук също не мога да те разбера...
Титла: Малко помощз за upload скирпт на php
Публикувано от: VladSun в May 20, 2008, 14:20
Примерен код | $ime=33.gif; | стринговете в PHP се ограждат в кавички.
Цитат | Просто този файл е примерен, аз ще се опивам да качвам ".swf" |
В момента мога да изпратя MIME type: image/gif, а да кача PHP файл...
RTM: http://bg2.php.net/is_uploaded_file
Титла: Малко помощз за upload скирпт на php
Публикувано от: VladSun в May 20, 2008, 14:29
Титла: Малко помощз за upload скирпт на php
Публикувано от: toti84 в May 20, 2008, 14:56
Благодрая много последно оставям файла така: Примерен код | <?php $ime='first.swf';
if (is_uploaded_file($_FILES['file']['tmp_name'])) { echo "faila ". $_FILES['file']['name'] ." e kachen.\n"; # readfile($_FILES['file']['tmp_name']);
if ($_FILES["file"]["size"] < 20000) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], #"/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"]); "/opt/lampp/htdocs/upload/" . $ime); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; }
} else { echo "Вероятен опит за пробив в сигурността при качване на файл: "; echo "Файл '". $_FILES['file']['tmp_name'] . "'."; }
?> |
Титла: Малко помощз за upload скирпт на php
Публикувано от: VladSun в May 20, 2008, 15:39
Пак има пропуски - прим. XSS с името на файла. Трябва ти нещо от сорта (модифицирай го за проверка на съдържание на *.swf файлове) на: Примерен код | <?php
function image_upload($upload_dir) { $allowed_type_extensions = array( 'image/jpeg' => 'jpeg', 'image/pjpeg' => 'pjpeg', 'image/gif' => 'gif', );
if (empty($_FILES) || empty($_FILES['file'])) throw new Exception('User file not specified.', 101); elseif (!is_uploaded_file($_FILES['file']['tmp_name'])) throw new Exception('File is not a HTTP uploaded one.', 102); elseif (!($img_info = getimagesize($_FILES['file']['tmp_name']))) throw new Exception('File is not an image.', 103); elseif (empty($allowed_type_extensions[$img_info['mime']])) throw new Exception('File is not an allowed image format.', 104); else { do $temp_name = md5(microtime().'salt_here_$#%^$^&$#%^').'.'.$allowed_type_extensions[$img_info['mime']]; while (file_exists($upload_dir.'/'.$temp_name)); if (!move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir.'/'.$temp_name)) throw new Exception('Could not move file to destination directory.', 105); else return $temp_name; } } ?> |
Титла: Малко помощз за upload скирпт на php
Публикувано от: toti84 в May 21, 2008, 16:16
Благодаря за отделеното време
|