Как безопасно загружать и отображать изображения в PHP [дубликат] ⇐ Php
-
Anonymous
Как безопасно загружать и отображать изображения в PHP [дубликат]
Я пишу функцию в веб-приложении, которая позволит пользователям загружать изображения, которые будут отображаться на страницах. Изображения будут загружены через редактор форматированного текста, аналогичный пользовательскому интерфейсу здесь, в stackoverflow.
Когда пользователи загружают и показывают изображения, я чувствую себя неловко. Я знаю, что многие хаки используют функцию загрузки файлов. Я хочу максимально защитить свое приложение.
Приложение написано на PHP, но я не думаю, что язык имеет большое значение. Важны шаги, предпринятые в процессе загрузки и отображения файла.
Вот что я планирую реализовать:
[*]Пользователи загружают файл [*]Проверьте размер файла >= MAX_FILE_SIZE (скажем, 2 МБ) [*]Проверьте тип mime (image/jpeg, image/png), чтобы разрешить только изображения в формате JPEG и PNG. [*]Сгенерировать случайное имя для загруженного файла с расширением на основе типа mime. [*]Сохранить файл [*]Показать изображение
Мне сразу приходит на ум одна вещь. Можно ли как-то обмануть функцию определения типа mime, чтобы можно было загружать не только изображение?
Кроме того, я использую PHP-фреймворк (Symfony), который имеет контроллер перехвата всех маршрутов, что означает, что веб-сервер сначала пытается найти запрошенный файл на диске, и если он не существует, то он пересылает запрос на перехват всех. Таким образом, вся ответственность за безопасность должна лежать на веб-сервере, а не в приложении PHP, поскольку запрос будет перенаправлен на веб-сервер.
Кажется, самое главное — поведение веб-сервера? И веб-сервер находится вне логики приложения. Я использую веб-сервер nginx.
Итак, мой вопрос: достаточно ли этих шагов для защиты моего приложения? Могу ли я предпринять какие-либо еще шаги, чтобы еще больше защитить его?
Я пишу функцию в веб-приложении, которая позволит пользователям загружать изображения, которые будут отображаться на страницах. Изображения будут загружены через редактор форматированного текста, аналогичный пользовательскому интерфейсу здесь, в stackoverflow.
Когда пользователи загружают и показывают изображения, я чувствую себя неловко. Я знаю, что многие хаки используют функцию загрузки файлов. Я хочу максимально защитить свое приложение.
Приложение написано на PHP, но я не думаю, что язык имеет большое значение. Важны шаги, предпринятые в процессе загрузки и отображения файла.
Вот что я планирую реализовать:
[*]Пользователи загружают файл [*]Проверьте размер файла >= MAX_FILE_SIZE (скажем, 2 МБ) [*]Проверьте тип mime (image/jpeg, image/png), чтобы разрешить только изображения в формате JPEG и PNG. [*]Сгенерировать случайное имя для загруженного файла с расширением на основе типа mime. [*]Сохранить файл [*]Показать изображение
Мне сразу приходит на ум одна вещь. Можно ли как-то обмануть функцию определения типа mime, чтобы можно было загружать не только изображение?
Кроме того, я использую PHP-фреймворк (Symfony), который имеет контроллер перехвата всех маршрутов, что означает, что веб-сервер сначала пытается найти запрошенный файл на диске, и если он не существует, то он пересылает запрос на перехват всех. Таким образом, вся ответственность за безопасность должна лежать на веб-сервере, а не в приложении PHP, поскольку запрос будет перенаправлен на веб-сервер.
Кажется, самое главное — поведение веб-сервера? И веб-сервер находится вне логики приложения. Я использую веб-сервер nginx.
Итак, мой вопрос: достаточно ли этих шагов для защиты моего приложения? Могу ли я предпринять какие-либо еще шаги, чтобы еще больше защитить его?
Мобильная версия