Последние комментарии
Для меня эта страница - это удобный способ смотреть, что нового происходит в комментариях и сразу находить заметку, не заходя в админку. Думаю, она будет полезна и тебе.
CrackCoder
Миш ты на go писал/пишешь?
Михаил Фленов 
Даже imagecreatefromgif не даёт тебе полную гарантию, что файл корректный. Я для бусти записал уже видео и в пятницу или субботу оно будет опубликовано. Ты в другом комментарии ссылаешься на статью ch4inrulz, где основной причиной для взлома был всё же LFI. О нём я также уже говорил на бусти. Защищай от LFI, не давай TXT фалам выполнение на сервере и проблем не будет.
toorr2p 
А как быть в принципе, если это не картинка, а например мы даем юзерам загружать к примеру тот же .txt, а в нем будет <php ... получается выход только использование директив Apache? Т.е на уровне PHP нет инструмента определить соответствие содержимого файла его типу (расширению) ?
Михаил Фленов 
Похоже вместо getimagesize нужно пробовать создавать картинку методами imagecreatefromgif или imagecreatefromjpeg. Нужно будет обновить книгу.
$gifimage = imagecreatefromgif($_FILES['file1']['tmp_name']);
if ($gifimage) {
if($_FILES['file1']['size']) {
move_uploaded_file($_FILES['file1']['tmp_name'], './filename.gif');
}
}
Михаил Фленов 
Если есть защита от второго, то защита от первого не нужна. Для защиты от второго раньше использовали getimagesize. Сейчас я полез в документацию и там к сожалению написано:
Caution
This function expects filename to be a valid image file. If a non-image file is supplied, it may be incorrectly detected as an image and the function will return successfully, but the array may contain nonsensical values.
Сейчас написал тестовый пример и действительно, для некорректного файлы в PHP8 возвращаются мусорные данные, которые не работают. Неожиданно. На сколько я помню в 5-м PHP проверка работала. Сейчас поиграю с функцией.
toorr2p 
Здравствуйте, вопросы по главе "5,1 Загрузка файлов на сервер"
1) Почему нет проверки $_SERVER['HTTP_REFERER']?
Ведь могут же сканером проходить по сайту, отыскивая формы с INPUT type="file" и грузить туда свои зловреды.
2) Также не понял, как защитится к примеру от загрузке шелла, под видом картинки GIF, описанной в этой статье "CTF-соревнование: взлом ch4inrulz (1.0.1)" на securitylab ru ? Я проверил, действительно все описанные проверки в главе не предотвращают от загрузки такого файла (shell.gif) с содержимым:
GIF98
<?php
echo $_SERVER["DOCUMENT_ROOT"];
?>
Код с проверками (из листинга главы)
<?php
$uplDstDir = $_SERVER['DOCUMENT_ROOT'] . '/upload';
$uplFileName = md5(microtime());
//Check file size
if(!$_FILES['file1']['size'])
die("Error fail upload file!");
//Check file max size
if($_FILES['file1']['size']>300*1024)
die("Error file size is larger 100kb!");
//If it’s a picture, check its width and height
$arrSize = getimagesize($_FILES['file1']['tmp_name']);
if(!$arrSize[0] || !$arrSize[1])
die("Error image dimensions must not be zero!");
//Check file type
preg_match("'([a-z]+)\/[x\-]*([a-z]+)'", $_FILES['file1']['type'], $ext);
if(!in_array($ext[2], array('jpg', 'jpeg', 'gif', 'png')))
die("Error file format not allowed!");
//Moving a file from a temporary directory to a permanent one
$uplFileName = "$uplDstDir/$uplFileName.$ext[2]";
if(!move_uploaded_file($_FILES['file1']['tmp_name'], $uplFileName))
die("Error file not upload!");
?>
Просьба подсказать как с этим бороться.
Михаил Фленов 
Поправил опечатку, там должно было быть слово "письмо"
Андрей Ше
Михаил, привет.
Можешь поправить начало этой статьи, может опечатка или часть текста пропала.
"Недавно получил само с вопросом о том, зачем нужны интерфейсы..."
Михаил Фленов 
В моём комментарии нужно было поставить вопрос. Мурыч что-то писал и мне казалось, что это You don’t know JavaScript, хотя может я тут не прав
Михаил Фленов
Нет