встраивание удаленных образов: как обрабатывать те, которые требуют аутентификации? - PullRequest
3 голосов
/ 28 февраля 2011

Я управляю большим и активным форумом, и нас преследует очень серьезная проблема. Мы разрешаем пользователям встраивать удаленные изображения, очень похоже на то, как stackoverflow обрабатывает изображение (imgur), однако у нас нет определенного набора хостов, изображения могут быть встроены с любого хоста с помощью следующего кода:

[img]http://randomsource.org/image.png[/img]

и это работает отлично и прекрасно ... за исключением того, что пользователи могут вставлять изображение, требующее аутентификации, изображение вызывает всплывающее окно, а поскольку всплывающие окна аутентификации можно редактировать, они вводят что-то вроде: ] имя пользователя и пароль здесь "и, к сожалению, наши пользователи влюбились в него.

Каков правильный ответ на это? Я думал о следующем:

  1. Каждая загрузка страницы имеет фрагмент выполнения Javascript, который проверяет каждое изображение на странице и его статус

  2. Иметь авторизованный список хостов изображений

  3. Полностью отключить удаленное встраивание

Проблема в том, что я НИКОГДА не видел, чтобы это происходило где-то еще, но мы страдаем от этого, как мы можем предотвратить это?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Это больше, чем проблема с паролем.Вы также разрешаете некоторым своим пользователям проводить CSRF-атаки против других пользователей.Например, пользователь может настроить изображение своего профиля как [img]http://my-active-forum.com/some-dangerous-operation?with-some-parameters[/img].

. Лучшее решение -

  1. Загрузить сервер изображений и сохранить его в файловой системе /база данных.Сохраняйте разумный максимальный размер файла, в противном случае злоумышленник может загрузить тонны ГБ данных на ваши серверы, чтобы захватить ресурсы диска и диска.
  2. При желании убедитесь, что файл действительно является образом
  3. Обслуживайте изображение, используя одноразовый домен или IP-адрес.Можно создавать изображения, маскирующиеся под банку или апплет;обслуживание всех файлов из одноразового домена защищает вас от такой злонамеренной активности.

Если вы не можете загрузить изображения на стороне сервера, создайте белый список разрешенных шаблонов URL (не только доменов) на сервере.боковая сторона.Откажитесь от любых URL, которые не соответствуют этому шаблону URL.

Вы НЕ ДОЛЖНЫ выполнять какие-либо проверки в javascript.Выполнение проверок в JS решает ваши непосредственные проблемы, но не защищает от CSRF.Вы по-прежнему делаете запрос на контролируемый злоумышленником URL-адрес из браузера своего пользователя, и это рискованно.Кроме того, влияние такого подхода на производительность является чрезмерным.

1 голос
/ 28 февраля 2011

Я думаю, вы в основном ответили на свой вопрос.Лично я бы выбрал сочетание между вариантом 1 и вариантом 2: то есть создать Javascript на стороне клиента, который сначала проверяет URL-адреса для вставки изображений в набор хостов, занесенных в белый список.Для каждого встроенного URL-адреса, которого нет в этом списке, сделайте что-нибудь по этим строкам , проверив, что сервер не возвращает код состояния 401.

Таким образом, существует баланс между задержкой(мы пытаемся минимизировать повторяющиеся запросы с помощью метода HEAD и белых списков доменов) и безопасности.Сказав это, вариант 2 является самым безопасным, если ваши пользователи могут его принять.

...