Zapobieganie atakom typu clickjacking za pomocą XFO lub CSP

Clickjacking to rodzaj ataku, w którym użytkownicy są zmuszani do klikania linków lub elementów interfejsu w witrynie, która wygląda na zaufaną i znaną. Zwykle polega to na umieszczeniu części lub całości zaufanej witryny w witrynie złośliwej za pomocą elementu <iframe>.

Nagłówek X-Frame-Options (XFO) i dyrektywa frame-ancestors w nagłówku Content-Security-Policy (CSP) mogą ograniczać ataki typu clickjacking, kontrolując sposób umieszczania witryny w elementach <iframe>.

Dlaczego audyt Lighthouse się nie udaje

Audyt zakończy się pomyślnie, jeśli nagłówek XFO jest ustawiony na SAMEORIGIN lub DENY albo jeśli w nagłówku CSP jest ustawiona dyrektywa frame-ancestors. Weryfikacja zakończy się niepowodzeniem, jeśli żadna z tych zasad nie jest skonfigurowana.

Raport Lighthouse z ostrzeżeniem, że nie znaleziono nagłówka odpowiedzi CSP ani XFO, który zapobiegałby przekierowywaniu kliknięć.
Zespół Lighthouse ostrzega, że nie znaleziono nagłówka odpowiedzi CSP ani XFO, który zapobiegałby klikaniu w treści.

Jak skonfigurować zasady kontroli ramek, aby ograniczyć ryzyko związane z przekierowywaniem kliknięć

W nagłówkach HTTP początkowego żądania dokumentu należy ustawić zasadę kontroli ramki. Nagłówek X-Frame-Options i dyrektywa frame-ancestors w elementach Content-Security-Policy nie będą działać, jeśli zostaną ustawione w elemencie <meta>.

Nagłówek XFO

Ustawienie wartości DENY lub SAMEORIGIN w nagłówku XFO ograniczy ataki typu clickjacking:

X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY

Dyrektywa SAMEORIGIN zezwala na wyświetlanie strony tylko wtedy, gdy wszystkie nadrzędne ramki mają ten sam element docelowy co strona. Z kolei dyrektywa DENY uniemożliwia wyświetlanie strony w ramce niezależnie od pochodzenia nadrzędnej ramki.

Nagłówek CSP

Dyrektywa frame-ancestors w nagłówku CSP określa, które witryny mogą umieszczać daną stronę w elementach <frame>, <iframe>, <object> lub <embed>. Podobnie jak w przypadku XFO, dyrektywa CSP frame-ancestors może być używana do zwalczania ataków typu clickjacking. Aby to zrobić, ustaw ją na self lub none:

Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';

Jednak dyrektywa frame-ancestors jest bardziej elastyczna niż XFO, ponieważ może określać konkretne źródła nadrzędne, które mogą zawierać stronę:

Content-Security-Policy: frame-ancestors 'self' https://example.com;

Zasoby