2016-09-23 4 views
2

Пользователи в моем приложении могут отправлять сообщения между ними, и они могут вставлять изображения с открытых сайтов в контент. Я хотел бы загрузить эти изображения и сохранить их в своем собственном хранилище, поэтому мое приложение не сломается при удалении изображений из Интернета.Фильтрация URL-адресов, чтобы разрешить только те, которые являются общедоступными

Я обрушился на последствия для безопасности.

  • Что делать, если пользователь отправляет сообщение с img src, которое начинается с http://localhost. Я буду запрашивать свой собственный сервер.
  • Что делать, если src является частным ip. Я буду подключаться к серверам в своей частной сети.
  • Что делать, если src является хостом, который разрешает 127.0.0.1.
  • И другие неприятные идеи, о которых я не могу думать.

Что я могу сделать, чтобы проверить, что я загружаю изображение с общедоступного сервера и не нажимаю на себя.

Я использую стандартную Java.

+0

Я знаю, что это не отвечает на ваш вопрос, следовательно, комментарий, но как вы гарантируете, что вам разрешено загружать такие изображения по закону? Там может быть фанки авторского права, поэтому, кроме технического риска, это также другой вид риска, который вы должны учитывать, я думаю. –

+0

@lengyelg Я думал, что DCMA защитит приложение в этом случае. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я НЕ адвокат. –

+0

@ АндрейБеньковский Я тоже не такой, поэтому я не уверен, и я бы предпочел написать что-то, что неправда, но это определенно то, что нужно разобраться, прежде чем отправиться жить. Просто хотел привлечь внимание. –

ответ

1

Для этого есть интерфейсные и бэкэнд-решения.

Просто запретите вашему приложению принимать такие ссылки. Используйте шаблоны, чтобы гарантировать, что определенные вещи фильтруются, например, ссылки localhost или оскорбительные ссылки. Даже если они сокращены. https://stackoverflow.com/a/8151742/2110818

Или сконфигурируйте свой брандмауэр , чтобы гарантировать, что порты 80 и 443 недоступны на машине с сервером Apache. Там вы можете многое сделать.

Какой сервер вы используете или собираетесь использовать для размещения своего сервера? Например, вы можете безопасный или кот другие серверы и предотвратить вещи от случаться, как здесь: https://www.mulesoft.com/tcat/tomcat-security

Кроме того, следует попытаться предотвратить любые непроверенных редирект в любом случае, даже в пределах своего кода. Таким образом, не просто сосредоточьтесь на внешних угрозах, ваш собственный код может навредить вам. Проверьте это, чтобы узнать больше: https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet

Но, я думаю, наиболее подходящее решение для предотвращения внутренних и внешних угроз - это правильно настроить вашу машину и обеспечить, чтобы брандмауэр охватывал все аспекты. Существуют подробные руководства по обеспечению безопасности серверов.

+2

Возможно, стоит упомянуть, что сделать недоступными порты 80 и 443 (и, предположительно, использовать другой порт справа), не обеспечит хорошую защиту, если только URL-адреса с явно указанными портами не будут отмечены черным цветом. –

+0

Привет! Я могу создать белый список/черный список, но я искал более безопасный подход.Я могу не вносить в черный список какие-то URL-адреса, и это проблема безопасности. Кроме того, как я могу использовать брандмауэр на сервере, если этот сервер является общедоступным. Я не могу блокировать 80 или 443. –

Смежные вопросы