Co je SameSite cookie
SameSite cookie je bezpečnostní atribut HTTP cookie, který určuje, zda má být cookie odesílána i při požadavcích pocházejících z jiné domény.
Slouží především jako ochrana proti útokům typu CSRF.
Pomocí atributu SameSite může server určit, za jakých podmínek prohlížeč připojí cookie k požadavku.
Jak SameSite funguje
Když server nastavuje cookie, může k ní přidat parametr SameSite.
Ten říká prohlížeči, zda má cookie odesílat pouze při tzv. „same-site“ požadavcích (tedy z té samé domény), nebo i při přístupu z jiného webu.
Prohlížeč pak při každém požadavku vyhodnocuje, zda cookie připojit, nebo ji z bezpečnostních důvodů zablokovat.
Tím, že se cookie při cross-site požadavku neodešle, může aplikace rozlišit, zda požadavek vznikl přímo na jejím webu (např. odesláním formuláře), nebo byl vyvolán z externí stránky. SameSite tak nepřímo umožňuje odhalit pokusy o CSRF útok.
Režimy SameSite
Atribut SameSite má tři základní režimy.
| Režim | Chování |
| Strict | Cookie se odesílá pouze při přímé návštěvě stejné domény |
| Lax | Cookie se odesílá při běžné navigaci (např. kliknutí na odkaz), ale ne při automatických požadavcích |
| None | Cookie se odesílá i při cross-site požadavcích (musí být použito spolu s atributem Secure) |
Režim Strict poskytuje nejvyšší úroveň ochrany, ale může omezit některé funkce webu závislé na cross-site přesměrování, například přihlášení přes externí služby (SSO), návrat z platební brány nebo práci s aplikací vloženou v iframe.
SameSite a bezpečnost
Použití atributu SameSite by mělo být kombinováno s dalšími bezpečnostními opatřeními:
- použitím HTTPS
- atributem Secure
- atributem HttpOnly
- implementací CSRF tokenů
SameSite není náhradou bezpečného návrhu aplikace, ale důležitou doplňkovou vrstvou ochrany.
Rizika špatné konfigurace
Nesprávné nastavení může způsobit problémy například:
- s přihlašováním přes externí identity providery
- při použití třetích stran (např. platební brány)
- u embedded aplikací
Proto je důležité nastavení testovat v kontextu konkrétní aplikace.