Zasada dotycząca tej samej domeny

Mariko Kosaka

Zasada dotycząca tej samej domeny to funkcja zabezpieczeń przeglądarki, która ogranicza możliwość interakcji dokumentów i skryptów z jednego źródła z zasobami z innego źródła.

Przeglądarka może ładować i wyświetlać zasoby z wielu witryn jednocześnie. Możesz mieć otwartych wiele kart jednocześnie lub witryna może zawierać wiele elementów iframe z różnych witryn. Jeśli nie ma ograniczeń interakcji między tymi zasobami, a haker przejął kontrolę nad skryptem, może on ujawnić wszystko, co znajduje się w przeglądarce użytkownika.

Zasada dotycząca tej samej domeny uniemożliwia to, blokując dostęp w trybie odczytu do zasobów wczytywanych z innego źródła. „Ale zaraz” – mówisz: „Cały czas wczytuję obrazy i skrypty z innych źródeł”. Przeglądarki pozwalają na umieszczanie zasobów z innych źródeł. Ta zasada jest głównie artefaktem historycznym i może narażać witrynę na luki w zabezpieczeniach, np. przesyłanie kliknięć za pomocą elementów iframe. Możesz ograniczyć odczyt tych tagów z innych domen za pomocą polityki bezpieczeństwa treści.

Co jest uznawane za tę samą pochodzenie?

Źródło jest definiowane przez schemat (nazywany też protokołem, np. HTTP lub HTTPS), port (jeśli został określony) i host. Gdy 2 adresy URL są takie same, uznaje się je za tę samą witrynę. Na przykład http://www.example.com/foo jest tym samym źródłem co http://www.example.com/bar, ale nie https://www.example.com/bar, ponieważ schemat jest inny.

Co jest dozwolone, a co zablokowane?

Zasadniczo umieszczanie zasobów z innych domen jest dozwolone, ale odczyt zasobów z innych domen jest zablokowany.

Elementy iframe Umieszczanie na stronach z innych domen jest zazwyczaj dozwolone (w zależności od dyrektywy X-Frame-Options), ale odczyt z innych domen (np. za pomocą JavaScriptu do uzyskiwania dostępu do dokumentu w elemencie iframe) jest już zakazany.
CSS Źródła CSS z innych domen można umieścić za pomocą elementu <link> lub @import w pliku CSS. Może być wymagany prawidłowy nagłówek Content-Type.
formularze Adresy URL z innych domen mogą być używane jako wartość atrybutu action elementów formularzy. Aplikacja internetowa może zapisywać dane formularza w innym miejscu docelowym.
zdjęcia Umieszczanie obrazów z innych domen jest dozwolone. Jednak odczyt danych obrazów z innych domen (np. pobieranie danych binarnych z obrazów z innych domen za pomocą JavaScriptu) jest zablokowany.
multimedia Materiały wideo i audio z innych domen można umieszczać na stronach, używając elementów <video> i <audio>.
pismo Skrypty z innych domen można umieszczać, ale dostęp do niektórych interfejsów API (np. żądań pobierania z innych domen) może być zablokowany.

DO ZROBIENIA: DevSite – ocena „Think and Check”

Jak zapobiegać przenoszeniu kliknięć

clickjacking
Rysunek: mechanizm przechwytywania kliknięć przedstawiony na 3 osobnych warstwach (witryna podstawowa, witryna z elementami iframe, przezroczysty przycisk).

W ataku typu „clickjacking” strona jest umieszczona w elemencie iframe i nakładana przezroczyste przyciski, które prowadzą do innego miejsca docelowego. Użytkownicy mogą sądzić, że korzystają z Twojej aplikacji, a jednocześnie wysyłają dane do atakujących.

Aby zablokować innym witrynom możliwość umieszczania Twojej witryny w elemencie iframe, dodaj do nagłówków HTTP politykę bezpieczeństwa treści z dyrektywą frame-ancestors.

Możesz też dodać X-Frame-Options do nagłówków HTTP w sekcji MDN, gdzie znajdziesz listę opcji.

Podsumowanie

Mam nadzieję, że poczuje się pewna ulga, że przeglądarki ciężko pracują, by chronić bezpieczeństwo w sieci. Choć przeglądarki starają się blokować dostęp do zasobów, czasami chcesz uzyskać w swoich aplikacjach dostęp do zasobów z innych domen. Z następnego przewodnika dowiesz się, jak działa udostępnianie zasobów między serwerami (CORS) i jak poinformować przeglądarkę, że ładowanie zasobów z innych domen jest dozwolone z zaufanych źródeł.