Добавленные пользователем изображения на сайте HTTPS без предупреждений о смешанном содержании

9

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

Каковы некоторые стратегии для решения этой проблемы? Некоторые изображения с моего собственного сайта, поэтому я могу переписать эти URL-адреса для использования HTTPS, поскольку знаю, что это будет работать. Но для внешних URL-адресов многие не работают с HTTPS, поэтому я не могу сделать полное переписывание.

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

DisgruntledGoat
источник
2
Вы могли бы использовать камуфляж ...
wb9688
2
Google не решил эту проблему для поиска изображений. Поиск изображений «небезопасен»: i.imgur.com/8XVTQsi.png
Стивен Остермиллер
2
Смотрите также на StackOverflow: Работа с HTTP-содержимым на страницах HTTPS
Стивен Остермиллер
1
Лучше я не знаю, и это может противоречить законодательству об авторском праве, но одним техническим решением было бы сделать копию изображения и обслуживать его с домена, находящегося под вашим контролем, через HTTPS ...
CVN
1
Плохой способ: при сохранении / редактировании вы можете применить логику, чтобы переписать все данные, которые предназначены src="http://someimage.jpg"для относительной структурированной src="//someimage.jpg"взамен ... или просто проверить их. Если вы хотите строгую зеленую блокировку (когда небезопасное изображение не победит вашу блокировку), включите HSTS. Затем в интерфейсе редактора отметьте, что в настоящее время изображения должны быть доступны через HTTPS, иначе они вообще не будут отображаться. Что-то вроде «К сожалению, вы сделали ошибку. Чтобы предотвратить злоупотребления и атаки MITM, все носители должны использовать HTTPS. Вернитесь и исправьте это или выберите другого поставщика изображений».
Дхаупин

Ответы:

1

Невозможно разместить незащищенные ресурсы на защищенной странице и не получить предупреждение о смешанном содержимом.

Для пользовательских агентов, которые его поддерживают, upgrade-insecure-requestsдиректива является инструкцией, чтобы попытаться загрузить ресурс через https или попытаться потерпеть неудачу.

Другие пользовательские агенты будут игнорировать директиву, продолжая загружать небезопасные ресурсы.

Вот статья на сайте разработчиков Google, обсуждающая этот и другие варианты.

Роберт К. Белл
источник
1

Просто понял, что я никогда не публиковал свое решение. Ответ предоставляется в комментарии Стефана является то , что решить ее для меня. Короче говоря, я создал прокси-скрипт, который делает следующее:

  1. Если изображение https, оставьте его в покое.
  2. Если изображение является http и с сайта, который поддерживает HTTPS (например, мой собственный сайт, imgur.com и т. Д.), То переписать на https.
  3. В противном случае, если изображение http, перепишите его, чтобы использовать http://example.com/imgproxy?img=ORIGINALURL&hash=KEY

Затем прокси-скрипт извлекает изображение HTTP, кэширует его локально и выводит данные изображения. При повторных запросах он выводит кэшированные данные напрямую. Связанный ответ SO описывает хэш безопасности и другие детали.

DisgruntledGoat
источник