Безопасные возможности загрузки пользовательских изображений в PHP

Я внедряю инструмент загрузки изображений для своего веб-сайта. Система должна позволять любым пользователям загружать только файлы 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) переименовать файл пользователя во что-то уникальный.

Спасибо,

10
задан flight643 4 September 2010 в 21:55
поделиться