Doxygen делает некоторый анализ потока управления и генерирует графики. Это не может быть тем, что Вы ищете, но я нашел их полезными для взгляда на.
Никогда не используйте имена файлов, отправленные пользователем; придумывайте новые типа «случайное число» .jpeg. «Очистить» имена файлов сложнее, чем вы думаете, особенно если приложение должно работать на сервере Windows.
Для изображений используйте функцию PHP getimagesize
, чтобы определить тип файла изображения, вместо того, чтобы смотреть на крайне ненадежные представления имени файла и mimetype. Запретите загрузки, которые не анализируются как изображения.
Для файлов, предназначенных для загрузки, используйте заголовок Content-Disposition: attachment
, чтобы IE не отслеживал содержимое HTML и не отображал его в браузере.
Для файлов, которые должны отображаться встроенными, вам придется обслуживать их с другого имени хоста на вашем основном сайте, в противном случае HTML-содержимое внутри них может перекрестно выполнять скрипт в вашем контексте безопасности.
Обеспечить безопасность функции загрузки файлов сложно . Дополнительные обсуждения .
Ни расширение файла, ни тип MIME не могут обеспечить 100% -ную безопасность при работе с файлом изображения. Но пока вы не собираетесь выполнять файл (например, используя include ()), это не проблема, и вам не нужно проверять PHP-код или что-то еще. Единственное нарушение безопасности, которое можно вообразить при использовании поддельного файла изображения, - это то, что использует механизм рендеринга браузера. От этого невозможно эффективно защититься со стороны сервера, и это ответственность производителя браузера.
Итак, если вы убедитесь, что используете is_uploaded_file ()
и move_uploaded_file ()
при обработке загрузки, все будет в порядке, по крайней мере, на фронте формата изображения. Обязательно прочтите сообщение @bobince ниже и перейдите по ссылке, в нем содержится много полезной информации о других аспектах безопасности при работе с файлами.
Однако вы можете для обеспечения максимальной безопасности, конечно, скопировать изображение в новый контейнер изображений с использованием GD's imagecopy . Это приведет к удалению любой ID3 и другой информации заголовка, содержащейся в файле, и, вероятно, уничтожит любые попытки эксплойта (GD, вероятно, подавится таким файлом и вернет ошибку). Это, конечно, работает только для форматов GIF, JPEG и PNG, и вы можете столкнуться с некоторыми проблемами, такими как проблемы с альфа-каналом и цветовым профилем.
Однако для обеспечения максимальной безопасности можно, конечно, скопировать изображение в новый контейнер изображений, используя копию изображения GD . Это приведет к удалению любой ID3 и другой информации заголовка, содержащейся в файле, и, вероятно, уничтожит любые попытки эксплойта (GD, вероятно, подавится таким файлом и вернет ошибку). Это, конечно, работает только для форматов GIF, JPEG и PNG, и вы можете столкнуться с некоторыми проблемами, такими как проблемы с альфа-каналом и цветовым профилем.
Однако для обеспечения максимальной безопасности можно, конечно, скопировать изображение в новый контейнер изображений, используя GD imagecopy . Это приведет к удалению любой ID3 и другой информации заголовка, содержащейся в файле, и, вероятно, уничтожит любые попытки эксплойта (GD, вероятно, подавится таким файлом и вернет ошибку). Это, конечно, работает только для форматов GIF, JPEG и PNG, и вы можете столкнуться с некоторыми проблемами, такими как проблемы с альфа-каналом и цветовым профилем.