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.
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;