Я внедряю инструмент загрузки изображений для своего веб-сайта. Система должна позволять любым пользователям загружать только файлы JPEG и PNG. Я, конечно, беспокоюсь о безопасности, и поэтому мне интересно, что многие умные люди, чем я, относятся к следующим проверкам на разрешение загрузки:
1) Первый белый список допустимых расширений файлов в PHP, разрешающих только PNG , PNG, JPG, JPG и JPEG. Получить расширение файла пользователя можно с помощью такой функции, как:
return end(explode(".", $filename));
Это должно помочь запретить пользователю загружать что-то вредоносное, например .png.php. Если это пройдет, перейдите к шагу 2.
2) Запустите функцию php getimageize () для файла TMP. Через что-то вроде:
getimagesize($_FILES['userfile']['tmp_name']);
Если это не возвращает false, продолжайте.
3) Убедитесь, что файл .htaccess размещен в каталоге загрузки, чтобы любые файлы в этом каталоге не могли анализировать файлы PHP:
php_admin_value engine Off
4) Переименовать в файле пользователя что-то предопределено. IE
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
Это также поможет предотвратить внедрение SQL, поскольку имя файла будет единственной определяемой пользователем переменной в любых используемых запросах.
Если я выполню вышеизложенное, насколько я уязвим для атаки? Прежде чем принять файл, я надеюсь, что я должен: 1) разрешить только jpgs и pngs, 2) проверить, что PHP говорит, что это правильный образ, 3) отключить каталог, в котором находятся изображения, от выполнения файлов .php и 4) переименовать файл пользователя во что-то уникальный.
Спасибо,