Intereting Posts

Как создать безопасный сценарий загрузки файлов в php?

я проверяю файл на его расширение и тип mime – есть ли что-нибудь еще, что я могу сделать, чтобы сделать загрузку файлов более безопасными?

его для аватара (так что все изображения находятся в одной папке). я думал о том, чтобы использовать htaccess, чтобы запретить выполнение любого PHP-файла, только чтобы найти какой-то файл php. что вы думаете?

Solutions Collecting From Web of "Как создать безопасный сценарий загрузки файлов в php?"

Ни расширение файла, ни тип mime не могут обеспечить вам 100% -ную защиту, связанную с файлом изображения. Но до тех пор, пока вы не собираетесь выполнять файл (например, с помощью include ()), это не проблема, и вам не нужно проверять код PHP или что-то еще. Единственное нарушение безопасности, которое можно было бы использовать поддельным файлом изображения, было бы тем, что использует механизм рендеринга браузера . Это невозможно эффективно защитить от серверной части и является ответственностью поставщика браузера.

Итак, пока вы используете is_uploaded_file() и move_uploaded_file() при обработке загрузки, вы должны быть в порядке, по крайней мере, в формате изображения спереди. Удостоверьтесь, что вы прочитали сообщение @ bobince ниже и следуете ссылке, он содержит кучу отличной информации о других аспектах безопасности при работе с файлами.

Тем не менее, вы можете обеспечить полную максимальную безопасность, конечно, скопировать изображение в новый контейнер изображений с помощью воображаемой модели GD. Это приведет к удалению любых данных ID3 и других заголовков, содержащихся в файле, и, возможно, приведет к уничтожению любых попыток использования (GD, вероятно, захлестнет такой файл и вернет ошибку). Конечно, это работает только для GIF, JPEG и PNG, и вы можете столкнуться с некоторыми проблемами, такими как проблемы с альфа-каналом и цветом.

  1. Никогда не используйте имена файлов, отправленные пользователем; составляют новые, например «случайное число» .jpeg. «Sanitizing» filenames сложнее, чем вы думаете, особенно если приложение должно работать на сервере Windows.

  2. Для изображений используйте функцию getimagesize PHP, чтобы определить getimagesize изображения, а не смотреть на недостоверные имена файлов и mimetype. Запретить загрузки, которые не анализируются как изображения.

  3. Для файлов, предназначенных для загрузки, используйте заголовок Content-Disposition: attachment чтобы остановить IE, обнюхивая содержимое HTML и отображая его в браузере.

  4. Для файлов, которые должны отображать встроенную строку, вам придется обслуживать их с другого имени хоста на ваш основной сайт, иначе содержимое HTML внутри них может использовать межсайтовый скрипт в вашем контексте безопасности.

Безопасная защита файлов. Больше обсуждений .