Последние комментарии
Для меня эта страница - это удобный способ смотреть, что нового происходит в комментариях и сразу находить заметку, не заходя в админку. Думаю, она будет полезна и тебе.
ва
ваы
Алексей Иванков 
Зря вы так, Сергей. Между "загнулся" (мертв) и не популярный - две большие разницы. Современный Delphi фактически тот же C#, но в чем то даже лучше. Попробуйте сами.
Михаил Фленов 
Нет
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!");
?>
Просьба подсказать как с этим бороться.
IDDQD
> Не знаю, как в России, а в Канаде в крупных компаниях очень сложно уволить сотрудника.
Excuse me?) Весь 2023 доказывает обратное