Последние комментарии

Для меня эта страница - это удобный способ смотреть, что нового происходит в комментариях и сразу находить заметку, не заходя в админку. Думаю, она будет полезна и тебе.


Михаил Фленов Зарегистрированный пользователь

Нет


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, хотя может я тут не прав


О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне