X-Frame-Options

Nagłówek odpowiedzi HTTP X-Frame-Options może być użyty do wskazania, czy przeglądarka powinna mieć możliwość renderowania strony w kodach  <frame>,  <iframe>,  <embed>  lub <object>. Witryny mogą z tego korzystać, aby uniknąć ataków typu click-jacking. Muszą się wtedy upewnić, że ich zawartość nie jest osadzona w innych witrynach.

Atakujący może załadować ramkę iframe na swojej stronie i ustawić Twoją stronę jako źródło. Używając sprytnego CSS, może ukryć Twoją witrynę w tle i stworzyć autentycznie wyglądające nakładki. Kiedy odwiedzający klikają na to, co wydaje im się nieszkodliwym linkiem, w rzeczywistości klikają na linki na Twojej stronie w tle. To może nie wydawać się takie złe, dopóki nie uświadomimy sobie, że przeglądarka wykona te żądania w kontekście użytkownika, który może być zalogowany i uwierzytelniony na Twojej stronie.

Dyrektywy X-Frame-Options

Istnieją dwie możliwe dyrektywy dla X-Frame-Options

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

Jeśli wprowadzisz DENY, to strona nie będzie się wyświetlać w ramce. Przy wprowadzeniu dyrektywy SAMEORIGIN witryna będzie się wyświetlać tylko w ramce o tym samym pochodzeniu co sama strona. Możesz zobaczyć także artykuł Zgodność z przeglądarkami, aby uzyskać szczegółowe informacje na temat pomocy technicznej.

Niektóre starsze wersje przeglądarek dopuszczały jeszcze dyrektywę ALLOW-FROM. Jest to przestarzała dyrektywa, która nie działa już w nowoczesnych przeglądarkach. Nie zalecam używania jej. W przypadku obsługi starszych przeglądarek strona będzie się wyświetlać w ramce tylko o określonym pierwotnym identyfikatorze uri.

Konfigurowanie serwera Apache

Aby skonfigurować Apache do wysyłania nagłówka dla wszystkich stron, dodaj do konfiguracji witryny X-Frame-Options poniższy kod:

Header always set X-Frame-Options "SAMEORIGIN"

Aby skonfigurować Apache do ustawienia DENY, dodaj do konfiguracji witryny X-Frame-Options poniższy kod:

Header set X-Frame-Options "DENY"

Konfiguracja Nginx

Aby skonfigurować Nginx do wysyłania nagłówka, dodaj do konfiguracji http, serwera lub lokalizacji X-Frame-Options następujący kod:

add_header X-Frame-Options SAMEORIGIN always;

Konfigurowanie usług IIS

Aby skonfigurować usługi IIS do wysyłania nagłówka X-Frame-Options, dodaj do pliku Web.config witryny:

<system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>

X-Frame-Options – podsumowanie

Jeśli wcześniej ustawiliśmy nagłówek Permissions Policy oraz Strict Transport Security, przystępujemy do konfiguracji obecnego. Efekty widzimy na stronie https://securityheaders.com/ i kolejny z obszarów zaświeci się na zielono.

x-frame-options
Konfiguracja X-Frame-Options na stronie testowej

Jest to kolejny z elementów mających na celu poprawę bezpieczeństwa naszej witryny. Jest to też kolejny z kroków do uzyskania końcowego efektu, jaki opisałem w artykule Strona internetowa – jak ją założyć?

Jeżeli potrzebujesz więcej informacji na temat tego nagłówka, znajdziesz je w artykule.