обезопасить сервер при загрузке картинок

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
bars
Сообщения: 977
ОС: BSD/LINUX

обезопасить сервер при загрузке картинок

Сообщение bars »

Привет.
Сервер на системе freebsd.
софт nginx/php.

Старший менеджер проекта дал распоряжение разрешить подгружать картинки в отзывы любому пришедшему на сайт пользователю.
Как в таком случае максимально обезопасить, что бы не взломали?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

Убедиться, что сервер имеет права на запись только в каталог, предназначенный для картинок. Убедиться, что он настроен на выполнение кода, лежащего в других каталогах. Проверять по содержимому, что загружаемые файлы — действительно картинки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 977
ОС: BSD/LINUX

Re: обезопасить сервер при загрузке картинок

Сообщение bars »

Bizdelnick писал:
26.06.2024 19:08
что сервер имеет права на запись только в каталог, предназначенный для картинок. Убедиться, что он настроен на выполнение кода, лежащего в других каталогах.
не понял, это как?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

Обычно. Что именно непонятно?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 977
ОС: BSD/LINUX

Re: обезопасить сервер при загрузке картинок

Сообщение bars »

Bizdelnick писал:
26.06.2024 19:32
Обычно. Что именно непонятно?
как это проверить, каждый файл php у сайта проверять что ле, не пойму.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

Вообще никакого отношения к php ответ не имеет. Сугубо настройки сервера и прав на каталоги.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 209
ОС: Gentoo Xfce4

Re: обезопасить сервер при загрузке картинок

Сообщение SwapON »

Для проверки, что пользователь грузит именно картинку, у PHP есть суперглобальный массив $_FILES с параметром enctype="multipart/form-data" и типом => image/(расширение).
Обвешайте в форме кода это всё if'ами (проверками на условия) типа если [type] === image/jpeg, то по кнопке button происходит мув_аплоадед_файл(), else файл не является картинкой.
P.S. -> вот тут <- вроде как Ваш пример.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

SwapON писал:
26.06.2024 23:47
Для проверки, что пользователь грузит именно картинку, у PHP есть суперглобальный массив $_FILES с параметром enctype="multipart/form-data" и типом => image/(расширение).
Эти данные передаются клиентом, на них нельзя полагаться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 209
ОС: Gentoo Xfce4

Re: обезопасить сервер при загрузке картинок

Сообщение SwapON »

Bizdelnick писал:
27.06.2024 11:04
Эти данные передаются клиентом, на них нельзя полагаться.
Вы между строк читаете?

Потрачу пять минут и попытаюсь объяснить доходчиво. Постарайтесь вникнуть:
$_FILES - это ассоциативный, суперглобальный массив, у которого есть тип (type) со значением format/info файла. Для примера возьмём утилиту mediainfo (уверен, что в Вашем дистрибутиве она присутствует). Возьмите любое изображение и посмотрите ранееупомянутой утилитой. Мой пример. Обратите внимание на расширение файла, на которое указывают целых 3 стрелочки. Далее мы заведомо меняем расширение файла на pdf и смотрим что покажет mediainfo. Именно про это я рассказал сообщением выше.

Я с Вами согласен, что грузить картинку в простой форме не комильфо. Для этого, в целях безопасности, "накладываются" всякие if, else, switch, case и т.п.

Мне кажется что -> тут <- можно увидеть исчерпывающее руководство и пример того, как проверять файл (картинку) и грузить её, если она проходит все проверки, на сайт.

Снова P.S> на момент зарождения моей учётной записи на этом форуме, я задал вопрос про PDO vs MySQLi, который Вы, мягко выражаясь, захейтили. Тем не менее я не стал прислушиваться к Вашему мнению, продолжив изучение PDO и на сегодняшний день у меня есть свои проекты, которые приносят (пока ещё небольшую) прибыль. Дальше больше...
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1474
ОС: Slackware

Re: обезопасить сервер при загрузке картинок

Сообщение UnixNoob »

SwapON писал:
27.06.2024 12:44
Вы между строк читаете?
Я так понял, ваш вариант подразумевал проверку на стороне клиента, раз вы на формы их вешаете, а не на стороне сервера.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

SwapON писал:
27.06.2024 12:44
Вы между строк читаете?
Нет, я читаю то, что написано. А вот Вы почему-то написанное мной понять не удосужились.
Не имеет никакого значения, является ли $_FILES глобальным, суперглобальным или ультрамегаглобальным. Важно только то, можно ли доверять информации, которая в нём содержится. А поскольку она берётся непосредственно из POST-запроса, в котором злоумышленник может прислать что ему угодно, доверять ей нельзя.
Upd. Собственно, по приведённой Вами же ссылке написано:
$_FILES['userfile']['type']

Mime-тип файла, в случае, если браузер предоставил такую информацию. В качестве примера можно привести "image/gif". Этот mime-тип не проверяется на стороне PHP, так что не полагайтесь на его значение без проверки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 209
ОС: Gentoo Xfce4

Re: обезопасить сервер при загрузке картинок

Сообщение SwapON »

Bizdelnick писал:
27.06.2024 18:57
можно ли доверять информации
Никому верить нельзя! Для этого есть проверки!
Bizdelnick писал:
27.06.2024 18:57
не полагайтесь на его значение без проверки.
В Вашем же сообщение упоминается про проверки.
Добавлено (23:50):
UnixNoob писал:
27.06.2024 13:53
Я так понял, ваш вариант подразумевал проверку на стороне клиента, раз вы на формы их вешаете, а не на стороне сервера.
Погодите. Помимо навешанных на форме проверок, на сервере (как я делаю) тоже есть проверки. Видимо я в начале это недосказал, но подразумевалось, что если человек такое спрашивает, то у него как минимум какая-нибудь CMS, в которой это реализовано, либо если это самопис и проект крупный или хотя бы средний, то тоже сделано. Не...? Комбинируем ту валидацию, что прилетает с формы на сервер и проверяем на сервере. Пример уже того, что прилетело с массива $_POST:

Shell

if ($_POST['картинка'] === формат/расширение или что там хотите)
грузим на сервер;
и это, во избежание критики, МИНИМАЛЬНАЯ проверка.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

SwapON писал:
27.06.2024 23:27
Для этого есть проверки!
Ну вот и рассказали бы, как проще всего проверить тип файла по его содержимому в PHP.
SwapON писал:
27.06.2024 23:27
и это, во избежание критики, МИНИМАЛЬНАЯ проверка.
Это не проверка, это слепая вера тому, что получено от клиента.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 209
ОС: Gentoo Xfce4

Re: обезопасить сервер при загрузке картинок

Сообщение SwapON »

Bizdelnick писал:
28.06.2024 00:35
Ну вот и рассказали бы
Ни в коем случае...! Ибо "единственно возможный хороший код (не весь, но местами проскакивает) - это тот, который написал сам. Любой чужой код — говно и писали его сумасшедшие укурки...!" Не желаю быть в чьих-то глазах говнокодером. Вы сами считаете пиху "мёртвой". Какой смысл мне доказывать обратное, ссылаясь на 90% интернета на PHP...? Могу только указать на вышесказанные примеры, отправить на php.net где всё разжёвано, осталось как минимум скопипастить, а в идеале включить голову и реализовать красивое. Если в лом читать, велком ту ютуб с неплохим примером
Добавлено (01:53):
Bizdelnick писал:
28.06.2024 00:35
что получено от клиента.
Так Вы проверьте то, что получаете от клиента.
Вы же когда в магазин приходите, расплачиваетесь наличкой, кассир проверяет достоинство купюры и если она больше, чем сумма выбранных Вами товаров, проводит операцию...=)
Йопа мать! Вы в очередной раз придираетесь ко мне...=)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20998
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: обезопасить сервер при загрузке картинок

Сообщение Bizdelnick »

SwapON писал:
28.06.2024 01:48
Какой смысл мне доказывать обратное, ссылаясь на 90% интернета на PHP...?
Пожалуйста, не надо в этой теме доказывать ничего, что не имеет отношения к вопросу ТСа. Мне очень жаль, что Вас когда-то настолько задели мои слова, что Вы спустя много лет не в состоянии вести конструктивное обсуждение.
SwapON писал:
28.06.2024 01:48
Йопа мать! Вы в очередной раз придираетесь ко мне...=)
Нет, не к Вам. Я Вас вообще не знаю. Я придираюсь к содержанию Ваших сообщений, потому что к безопасности то, что в них написано, отношения не имеет.
SwapON писал:
28.06.2024 01:48
Могу только указать на вышесказанные примеры, отправить на php.net где всё разжёвано, осталось как минимум скопипастить
Там очень много чего написано (включая редкостные глупости в комментариях), но ссылки именно на то, как обезопасить себя от загрузки исполняемого кода под видом картинок, Вы не привели. То есть чего-то вроде такого (не рекомендую ничего копипастить ни отсюда, ни откуда бы то ни было, просто пример для ознакомления).

P. S. Строго говоря, такие проверки тоже можно обойти, так что полагаться только на них нельзя. В первую очередь нужно, как я писал выше, обеспечить невозможность интерпретации любых загруженных файлов как кода.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 209
ОС: Gentoo Xfce4

Re: обезопасить сервер при загрузке картинок

Сообщение SwapON »

Bizdelnick писал:
28.06.2024 10:12
Исходя из Вашей логики, надо оборвать все интернеты, так как ни одна система не идеальна. Нужно закрыться дома и читать старые-добрые книжки в бумажном варианте, но я уверен, что с Вашей "душностью", Вы и там найдёте к чему придраться.

Прислушиваться к Вашему мнению, про глупости на крупных проектах, где люди делятся опытом - это всё не не то.

Опять же, почему тут rssbot, сливает новости с opennet 1 к 1...? Вдруг там дезинформация или в содержании встроен вредоносный код, который отработает на этом форуме? Где безопасность?

P.S.
Bizdelnick писал:
28.06.2024 10:12
что Вы спустя много лет
3 года - это не много лет.
Bizdelnick писал:
28.06.2024 00:35
Ну вот и рассказали бы
Обратите внимание на свой первый ответ. Достаточно ли он информативен ТС'у...?
Спасибо сказали: