Я реализую инструмент загрузки изображений на основе пользователя для своего сайта. Система должна позволять любым пользователям загружать только файлы JPEG и PNG. Я, конечно, беспокоюсь о безопасности, и поэтому мне интересно, как многие умные люди, чем я, относятся к следующим проверкам, позволяющим загружать:Безопасные возможности загрузки изображений пользователя в PHP
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) Переименовать файл пользователя на что-то заранее определенный. И.Е.
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
Это также поможет предотвратить инъекции SQL, как имя файла будет единственным пользователем определяется переменной в любых запросах, используемых.
Если я выполняю вышеизложенное, насколько уязвим для нападения, я все еще? Прежде чем принимать файл, я должен надеяться, что 1) разрешено только jpg и png, 2) проверено, что PHP говорит, что это допустимое изображение, 3) отключил каталог, в котором находятся изображения из исполняемых файлов .php, и 4) переименовал файл пользователя в нечто уникальный.
Спасибо,
Не могли бы вы использовать strip_tags на файл изображения, чтобы удалить PHP теги? –