| |
|
|
| | Подскажите, кто знает:
как проверять пользовательские файлы перед загрузкой на сервер на типы, например, чтобы было разрешено только закачивать изображения, или музыку, или просто текстовые файлы.
И ещё вопрос: насколько такая проверка обезопасит сайт от возможных хакеров и их атак. Может есть способ ещё надёжнее для проверки загружаемого? Заранее спасибо, кто поможет советом. | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 14:01)
| | | Проверять надо на mime-тип и расширение. Кроме того, можно дополнительно на загружаемые файлы выставлять права только на чтение | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 14:01)
| | | А что известно о файлах заранее - это будут произвольные файлы или строго определённого типа, например, архивы или изображения? | |
| |
|
|
| |
|
|
| |
для: cheops
(23.07.2006 в 14:09)
| | | В одном случае это будут файлы MP3, в другом - изображения(фото). Т.е.предполагается, что пользователи будут согласно инструкуции грузить именно указанное. Но ведь доверять им нельзя, поэтому и прошу помочь с кодом. Для "BobiKK " - я и сам знаю что надо проверять на мим-типы (у меня есть и все типы мим-фалов), но
КАК ЭТА ПРОВЕРКА ВЫГЛЯДИТ В КОДЕ и какие лучше права выставлять на файлы, как это всё может выглядеть хотя бы примерно. | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 14:18)
| | | Для MP3 файла следует при загрузке проверить, равен ли его медиа-тип "audio/mpeg"
<?php
if($_FILES['attach']['type'] != 'audio/mpeg') exit("Это не MP3-файла");
$ext = strrchr($_FILES['attach']['name'], ".");
if(!preg_match("|^\.mp3$|i", $ext)) exit("Это не MP3-файла");
?>
|
Тоже самое и с jpeg-файлами. | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 14:18)
| | | $_FILES['userfile']['type']
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif" (c) php.net
$allowed_files = array("image/gif", "image/png", "iamge/jpeg");
...
if (!in_array($_FILES['userfile']['type'], $allowed_files) die("Недопустимый формат файла");
|
| |
| |
|
|
| |
|
|
| |
для: BobiKK
(23.07.2006 в 14:30)
| | | Сheops и BobiKK! Спасибо огромное! Теперь буду знать...
Но ещё возник вопрос.
У меня, напрмер, файл изображения вводится в поле "foto", соответственно, переменная при обработке называется $foto. Пытаюсь подставить в этот код и загружаю нормальный jpg-файл, но он не идентифицируется и пишет "Ошибка" (или вместо "foto" ниже надо всё равно писать "userfile". Что тут не так, помогите разобраться:
Вот код:
if($_FILES['foto']['type'] != 'image/jpeg')
print"Ошибка!";
|
Пробовал также такую конструкцию:
if (filetype($foto) != 'image/jpeg')
print"Ошибка!";
|
Всё равно при загрузке нормального jpg-файла, пишет "Ошибка" . | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 15:03)
| | | Вопрос ещё актуален, помогите, кто может... | |
| |
|
|
| |
|
|
| |
для: Владимир22
(23.07.2006 в 15:03)
| | | А вы при загрузке фотографии выведите его тип - что там?
<?php
echo $_FILES['foto']['type'];
exit();
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(26.07.2006 в 11:36)
| | | Спасибо , cheops! Сам не додумался проверить.
Пишет на все файлы jpeg: image/pjpeg
Что за формат такой непонятный с этой буквой "p"... И какие ещё бывают варианты, чтобы наверняка опознавал и не браковал. | |
| |
|
|
| |
|
|
| |
для: Владимир22
(26.07.2006 в 16:47)
| | | >Что за формат такой непонятный с этой буквой "p"... И какие
>ещё бывают варианты, чтобы наверняка опознавал и не
>браковал.
Из вариантов jpeg знаю ещё jpeg2000 | |
| |
|
|
| |
|
|
| |
для: Владимир22
(26.07.2006 в 16:47)
| | | Лучше проверяйте равны ли первые 5 символов строки image - надёжнее получится. | |
| |
|
|
| |
|
|
| |
для: cheops
(26.07.2006 в 21:46)
| | | Кто подскажет, что не так? -
выводит 5 первых букв не типа изображения, а самого слова filetype.
$mf = substr(filetype($foto),0,5);
if ($mf != "image"){
print "<script language='JavaScript'>
window.alert('$mf ----Это не изображение.');</script>";}
|
| |
| |
|
|
| |
|
|
| |
для: Владимир22
(27.07.2006 в 00:54)
| | | Странно...Обычно это может быть из-за кавычек...У вас нет...Ну попробуйте
$filetype = filetype($foto);
$mf = substr($filetype, 0, 5);
if ($mf != "image")
{
echo "<script language='JavaScript'>\nwindow.alert('$mf ----Это не изображение.');</script>";
}
|
| |
| |
|
|
| |
|
|
| |
для: Unkind™
(27.07.2006 в 01:33)
| | | Не хочет всё равно. Самое интересное, что эхом показывает 4 символа (file), а первый - $ - не отображает. | |
| |
|
|
| |
|
|
| |
для: Владимир22
(27.07.2006 в 03:07)
| | | string filetype ( string filename )
Возвращает тип файла. Возможными значениями являются fifo, char, dir, block, link, file и unknown.
Вот так должно работать:
<?php
$file = $_FILES['foto']['type'];
$file_type = substr($file, 0, 5);
if($file_type != "image")
exit("Не допустимый тип файла !"):
?>
|
| |
| |
|
|
| |
|
|
| |
для: hell_riser
(27.07.2006 в 20:39)
| | | Да, так работает. Спасибо, hell_riser! | |
| |
|
|