Użytkownik przesłał obrazy na stronie HTTPS bez ostrzeżeń o mieszanych treściach

9

Mam forum, na którym, podobnie jak większość forów, użytkownicy mogą zamieszczać zdjęcia. Skonfigurowałem HTTPS w całej witrynie, ale oczywiście większość obrazów zewnętrznych jest połączonych za pomocą HTTP, a nie HTTPS. Tak więc ładowanie forum przez HTTPS pokazuje ostrzeżenia o mieszanej zawartości itp.

Jakie są strategie rozwiązania tego problemu? Niektóre obrazy pochodzą z mojej własnej witryny, więc mogę przepisać te adresy URL, aby używać HTTPS, ponieważ wiem, że to zadziała. Ale w przypadku zewnętrznych adresów URL wiele nie działa z HTTPS, więc nie mogę przepisać koców.

Mógłbym przepisać niezabezpieczone obrazy na linki zamiast obrazów wbudowanych, ale to nie wygląda świetnie i może być mylące dla użytkowników. Jakieś lepsze rozwiązania?

DisgruntledGoat
źródło
2
Możesz użyć kamuflażu
wb9688 18.09.16
2
Google nie rozwiązało tego w przypadku wyszukiwania grafiki. Wyszukiwanie obrazów jest „niezabezpieczone:” i.imgur.com/8XVTQsi.png
Stephen Ostermiller
2
Zobacz także na StackOverflow: Radzenie sobie z treściami HTTP na stronach HTTPS
Stephen Ostermiller
1
Lepiej, że nie wiem, i może to być sprzeczne z przepisami dotyczącymi praw autorskich, ale jednym z technicznych rozwiązań byłoby zrobienie kopii obrazu i podanie go z domeny pod Twoją kontrolą, za pośrednictwem HTTPS ...
CVn
1
Zły sposób: po zapisaniu / edycji możesz zastosować logikę, aby przepisać wszystkie dane, które mają być src="http://someimage.jpg"skierowane do struktury względnej src="//someimage.jpg"zamiast ... lub po prostu ją zweryfikować. Jeśli chcesz ścisłego zielonego zamka (w którym niepewny obraz nie zadziała), wymusz HSTS. Następnie w interfejsie edytora zwróć uwagę, że obrazy muszą być obecnie dostępne za pośrednictwem HTTPS, w przeciwnym razie w ogóle się nie pojawią. Coś w stylu „Ups, popełniłeś błąd. Aby zapobiec nadużyciom i atakom MITM, wszystkie media muszą korzystać z HTTPS. Wróć i popraw je lub wybierz innego dostawcę obrazu”.
dhaupin,

Odpowiedzi:

1

Nie można mieć niebezpiecznych zasobów na bezpiecznej stronie i nie wyświetlać ostrzeżenia o mieszanej zawartości.

W przypadku agentów użytkownika, które ją obsługują, upgrade-insecure-requestsdyrektywa jest instrukcją, aby spróbować załadować zasób przez https lub nie powiodło się.

Inne programy użytkownika zignorują dyrektywę, kontynuując ładowanie niepewnych zasobów.

Oto artykuł na stronie Google Developers omawiający tę i inne opcje.

Robert K. Bell
źródło
1

Właśnie zdałem sobie sprawę, że nigdy nie opublikowałem mojego rozwiązania. Odpowiedź zawarte w komentarzu Stefana właśnie rozwiązać go dla mnie. Krótko mówiąc, utworzyłem skrypt proxy, który wykonuje następujące czynności:

  1. Jeśli obraz jest https, zostaw go w spokoju.
  2. Jeśli obraz jest w formacie http i pochodzi ze strony znanej z obsługi protokołu https (np. Z mojej własnej witryny, imgur.com itp.), To przepisz do https.
  3. W przeciwnym razie, jeśli obraz jest http, przepisz go, aby go użyć http://example.com/imgproxy?img=ORIGINALURL&hash=KEY

Następnie skrypt proxy pobiera obraz HTTP, buforuje go lokalnie i wysyła dane obrazu. Przy powtarzających się żądaniach wysyła bezpośrednio buforowane dane. Połączona odpowiedź SO opisuje skrót bezpieczeństwa i inne szczegóły.

DisgruntledGoat
źródło