Tolik zbytečných vět. Local storage neposkytuje žádné bezpečnostní funkce narozdíl od cookies.
Za bezpečnostní funkci považujete to, že prohlížeč přibalí cookie ke každému požadavku, kam to jde?
Do not store session identifiers in local storage as the data is always accessible by JavaScript. Cookies can mitigate this risk using the httpOnly flag.
To ovšem vychází ze dvou mylných předpokladů. První je, že to, co je přístupné JavaScriptu, je automaticky méně bezpečné, než to, co JavaScriptu přístupné není. Za druhé, že když je cookie nedostupná JavaScriptu přímo v prohlížeči, není dostupná žádným jiým způsobem – zejména že se nikdy nemůže stát, že server nevloží cookie do těla odpovědi.
Ta OWASP doporučení jsou bohužel taková nestrukturovaná směska lidové moudrosti, která nebere v potaz vývoj.
Já jsem svoje důvody, proč je podle mne bezpečnější sessionStorage než cookies, napsal. XSS je pro mne nepřípustné, odmítám za bezpečnou považovat aplikaci, u které se připouští možnost napadení XSS. Takže když se bavíme o tomto neprosto nejpravděpodonbějším případu, kdy útočník nemá možnost spustit v doméně aplikace svůj JavaScriptový kód, uložení tokenu do sessionStorage s sebou nenese žádné riziko útoku, použití cookies s sebou nese riziko útoku CSRF. CSRF útoku se lze spolehlivě bránit jen použitím SameSite cookie, což je ale méně podporovaná technologie, než CSP, která brání XSS.
No a když už připustím XSS, pak není prakticky žádný rozdíl mezi použitím sessionStorage nebo cookies.
Takže za mne je postup následující:
- Psát aplikaci tak, aby nebyla náchylná na XSS.
- Zabezpečit aplikaci pomocí CSP tak, aby v prohlížečích, které CSP podporují, nebylo XSS možné.
- Aplikace je proti XSS odolná, takže mohu směle použít sessionStorage a nemusím se bát CSRF.
Nehledě na to, že same-site politiky (obecně, ne jen cookies) jsou z principu děravé, takže spoléhat se na SameSite cookie jako na 100% ochranu je také dost naivní.