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;