Naprawianie treści mieszanej

Obsługa protokołu HTTPS w witrynie to ważny krok w celu ochrony witryny i użytkowników przed atakami. Jednak treść mieszana może sprawić, że ta ochrona będzie bezużyteczna. Rosnąco niezabezpieczone treści mieszane będą blokowane przez przeglądarki, zgodnie z opisem w sekcji Co to jest treść mieszana?

W tym przewodniku zademonstrujemy techniki i narzędzia, które pozwalają rozwiązywać problemy z treściami mieszanymi i zapobiegać pojawianiu się nowych.

Znajdowanie treści o różnych ustawieniach SSL na stronie

Gdy użytkownik odwiedza stronę HTTPS w Google Chrome, przeglądarka ostrzega o zawartości mieszanej w postaci błędów i ostrzeżeń w konsoli JavaScriptu.

W sekcji Co to jest treść mieszana? znajdziesz wiele przykładów i zobaczysz, jak problemy są zgłaszane w Narzędziach deweloperskich w Chrome.

Przykład pasywnej treści mieszanej powoduje wyświetlanie następujących ostrzeżeń. Jeśli przeglądarka znajdzie treści pod adresem URL w przeglądarce https, automatycznie ją uaktualnia i wyświetli odpowiedni komunikat.

Narzędzia deweloperskie w Chrome pokazujące ostrzeżenia wyświetlane po wykryciu i uaktualnieniu zawartości mieszanej

Aktywna treść mieszana jest zablokowana i wyświetla się ostrzeżenie.

Narzędzia deweloperskie w Chrome pokazujące ostrzeżenia wyświetlane, gdy aktywna treść mieszana jest blokowana

Jeśli zobaczysz takie ostrzeżenia w przypadku http:// adresów URL w swojej witrynie, musisz naprawić je w źródle witryny. Warto zrobić listę tych adresów URL wraz ze stronami, na których zostały znalezione, i skorzystać z nich podczas rozwiązywania problemów.

Znajdowanie w witrynie treści o różnych ustawieniach SSL

Treści mieszane możesz wyszukiwać bezpośrednio w kodzie źródłowym. Wyszukaj w źródle ciąg http:// i znajdź tagi zawierające atrybuty adresu URL HTTP. Pamiętaj, że umieszczenie http:// w atrybucie href tagów kotwicy (<a>) często nie stanowi problemu dotyczącego treści mieszanej. Kilka ważnych wyjątków zostanie omówionych później.

Jeśli Twoja witryna została opublikowana za pomocą systemu zarządzania treścią, linki do niezabezpieczonych adresów URL mogą być wstawiane przy publikowaniu stron. Na przykład obrazy mogą być uwzględnione w pełnym adresie URL zamiast w ścieżce względnej. Musisz je znaleźć i poprawić w systemie CMS.

Naprawianie treści mieszanej

Gdy znajdziesz w źródle witryny treści o różnych ustawieniach, wykonaj te czynności, aby rozwiązać problem.

Jeśli w konsoli pojawi się komunikat, że żądanie dotyczące zasobu zostało automatycznie przekształcone z protokołu HTTP na HTTPS, możesz bezpiecznie zmienić adres URL zasobu http:// w kodzie na https://. Możesz też sprawdzić, czy zasób jest dostępny bezpiecznie, zmieniając http:// na https:// na pasku adresu przeglądarki i próbując otworzyć adres URL na karcie przeglądarki.

Jeśli zasób nie jest dostępny w systemie https://, rozważ zastosowanie jednej z tych możliwości:

  • Dołącz zasób od innego hosta, jeśli jest dostępny.
  • Możesz pobierać i przechowywać treści bezpośrednio w swojej witrynie, jeśli możesz to robić zgodnie z prawem.
  • Wyklucz zasób z witryny.

Gdy rozwiążesz problem, wyświetl stronę, na której znajdował się błąd, i sprawdź, czy już się nie pojawia.

Uważaj na niestandardowe użycie tagów

Uważaj na niestandardowe użycie tagów w swojej witrynie. Na przykład adresy URL w tagach kotwicy (<a>) nie powodują błędów z treścią mieszaną, ponieważ powodują otwarcie nowej strony w przeglądarce. Oznacza to, że zwykle nie trzeba ich naprawiać. Niektóre skrypty galerii obrazów zastępują jednak funkcjonalność tagu <a> i wczytują w widoku lightbox na stronie zasób HTTP określony przez atrybut href, co powoduje problem z zawartością mieszaną.

Obsługa treści mieszanych na dużą skalę

Powyższe ręczne czynności sprawdzają się w przypadku mniejszych witryn, ale w przypadku dużych witryn lub witryn z wieloma osobnymi zespołami programistów śledzenie całej wczytywanej treści może być trudne. Aby ułatwić sobie zadanie, możesz użyć polityki bezpieczeństwa treści, która poinstruuje przeglądarkę, aby powiadamiała przeglądarkę o treści mieszanej i zagwarantowała, że Twoje strony nigdy nie będą nieoczekiwanie wczytywać niezabezpieczonych zasobów.

Polityka bezpieczeństwa treści

Polityka bezpieczeństwa treści (CSP) to wielofunkcyjna przeglądarka, która pozwala zarządzać treścią mieszaną na dużą skalę. Mechanizm raportowania CSP może służyć do śledzenia treści mieszanej w witrynie i określania zasad ich egzekwowania, aby chronić użytkowników przez uaktualnienie lub zablokowanie takiej treści.

Aby włączyć te funkcje w przypadku strony, umieść nagłówek Content-Security-Policy lub Content-Security-Policy-Report-Only w odpowiedzi wysyłanej z serwera. Dodatkowo za pomocą tagu <meta> w sekcji <head> strony możesz ustawić właściwość Content-Security-Policy (ale nie Content-Security-Policy-Report-Only).

Znajdowanie treści mieszanej z zasadą bezpieczeństwa treści

Polityka bezpieczeństwa treści pozwala zbierać raporty o treści mieszanej w witrynie. Aby włączyć tę funkcję, ustaw dyrektywę Content-Security-Policy-Report-Only, dodając ją jako nagłówek odpowiedzi w witrynie.

Nagłówek odpowiedzi:

Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/reportingEndpoint

Za każdym razem, gdy użytkownik odwiedza stronę w Twojej witrynie, jego przeglądarka wysyła do https://example.com/reportingEndpoint raporty w formacie JSON dotyczące wszelkich naruszeń polityki bezpieczeństwa treści. W takim przypadku za każdym razem, gdy zasób podrzędny jest wczytywany przez HTTP, wysyłany jest raport. Raporty te zawierają adres URL strony, na której doszło do naruszenia zasad, oraz adres URL zasobu podrzędnego naruszającego zasady. Jeśli skonfigurujesz punkt końcowy raportowania pod kątem rejestrowania tych raportów, możesz śledzić treści mieszane w witrynie bez wchodzenia na poszczególne strony.

Oto 2 zastrzeżenia:

  • Użytkownicy muszą odwiedzić Twoją stronę w przeglądarce, która rozpoznaje nagłówek CSP. Działa to w większości nowoczesnych przeglądarek.
  • Otrzymujesz tylko raporty dotyczące stron odwiedzonych przez użytkowników. Jeśli masz strony o małej liczbie wizyt, może minąć trochę czasu, zanim otrzymasz raporty o całej witrynie.

Więcej informacji i przykładowy punkt końcowy znajdziesz w przewodniku po polityce bezpieczeństwa treści.

Alternatywy dla raportowania za pomocą CSP

Jeśli witryna jest hostowana na platformie takiej jak Blogger, możesz nie mieć uprawnień do modyfikowania nagłówków i dodawania dostawcy CSP. Zamiast tego możesz użyć robota indeksującego witryny, by znaleźć problemy w witrynie, np. HTTPSChecker lub narzędzie do skanowania treści mieszanych.

Uaktualnianie niezabezpieczonych żądań

Obsługa przeglądarek

  • 44
  • 17
  • 48
  • 10.1

Źródło

Przeglądarki zaczynają uaktualniać i blokować niezabezpieczone żądania. Za pomocą dyrektyw CSP możesz wymusić automatyczne uaktualnianie lub blokowanie tych zasobów.

Dyrektywa CSP upgrade-insecure-requests informuje przeglądarkę, że ma uaktualnić niezabezpieczone adresy URL przed wysłaniem żądań sieciowych.

Jeśli na przykład strona zawiera tag obrazu z adresem URL HTTP takim jak <img src="http://example.com/image.jpg">

Przeglądarka wysyła bezpieczne żądanie https://example.com/image.jpg, chroniąc w ten sposób użytkownika przed treścią mieszaną.

Możesz to zrobić, wysyłając nagłówek Content-Security-Policy z tą dyrektywą:

Content-Security-Policy: upgrade-insecure-requests

Możesz też umieścić tę samą dyrektywę w sekcji <head> dokumentu za pomocą elementu <meta>:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

Tak jak w przypadku automatycznego uaktualniania przeglądarki, jeśli zasób jest niedostępny przez HTTPS, uaktualnione żądanie nie powiedzie się, a zasób nie zostanie wczytany. Zapewnia to bezpieczeństwo strony. Dyrektywa upgrade-insecure-requests wykracza poza automatyczne uaktualnianie przeglądarek i stara się stosować żądania uaktualnienia, których przeglądarka obecnie nie spełnia.

Dyrektywa upgrade-insecure-requests rozwija się kaskadowo do dokumentów <iframe>, zapewniając ochronę całej strony.