я проверяю файл на его расширение и тип mime – есть ли что-нибудь еще, что я могу сделать, чтобы сделать загрузку файлов более безопасными?
его для аватара (так что все изображения находятся в одной папке). я думал о том, чтобы использовать htaccess, чтобы запретить выполнение любого PHP-файла, только чтобы найти какой-то файл php. что вы думаете?
Ни расширение файла, ни тип mime не могут обеспечить вам 100% -ную защиту, связанную с файлом изображения. Но до тех пор, пока вы не собираетесь выполнять файл (например, с помощью include ()), это не проблема, и вам не нужно проверять код PHP или что-то еще. Единственное нарушение безопасности, которое можно было бы использовать поддельным файлом изображения, было бы тем, что использует механизм рендеринга браузера . Это невозможно эффективно защитить от серверной части и является ответственностью поставщика браузера.
Итак, пока вы используете is_uploaded_file()
и move_uploaded_file()
при обработке загрузки, вы должны быть в порядке, по крайней мере, в формате изображения спереди. Удостоверьтесь, что вы прочитали сообщение @ bobince ниже и следуете ссылке, он содержит кучу отличной информации о других аспектах безопасности при работе с файлами.
Тем не менее, вы можете обеспечить полную максимальную безопасность, конечно, скопировать изображение в новый контейнер изображений с помощью воображаемой модели GD. Это приведет к удалению любых данных ID3 и других заголовков, содержащихся в файле, и, возможно, приведет к уничтожению любых попыток использования (GD, вероятно, захлестнет такой файл и вернет ошибку). Конечно, это работает только для GIF, JPEG и PNG, и вы можете столкнуться с некоторыми проблемами, такими как проблемы с альфа-каналом и цветом.
Никогда не используйте имена файлов, отправленные пользователем; составляют новые, например «случайное число» .jpeg. «Sanitizing» filenames сложнее, чем вы думаете, особенно если приложение должно работать на сервере Windows.
Для изображений используйте функцию getimagesize
PHP, чтобы определить getimagesize
изображения, а не смотреть на недостоверные имена файлов и mimetype. Запретить загрузки, которые не анализируются как изображения.
Для файлов, предназначенных для загрузки, используйте заголовок Content-Disposition: attachment
чтобы остановить IE, обнюхивая содержимое HTML и отображая его в браузере.
Для файлов, которые должны отображать встроенную строку, вам придется обслуживать их с другого имени хоста на ваш основной сайт, иначе содержимое HTML внутри них может использовать межсайтовый скрипт в вашем контексте безопасности.
Безопасная защита файлов. Больше обсуждений .