Pozor na JWT v local storage!

JavaScript

Nedávno vyšel článek na blogu etického hackera Marka Tótha, ve které popisuje zranitelnosti, které odhalil ve službě Hero Hero. Jedna z věcí, které v článku popisuje, a kterou pokládám za poměrně častou, je ukládání JWT do local storage.

Ve zkratce

Jde o riziko spojené s XSS. Pokud totiž zároveň na svém webu XSS zranitelnost máte, tak ukradení JWT prostřednictví podstrčeného kódu se rovná ukradení uživatelské session. Samozřejmě je lepší na webu/aplikaci XSS zranitelnost nemít, ale je ještě lepší ošetřit všechny možnosti pro každý případ – tedy i daný JWT v local storage.

Řešení?

Místo local storage ukládat JWT do cookies s nastavením: HttpOnly, secure a same-site (pokud je to možné a API máte na stejné stránce). Takové řešení znamená, že v aplikaci nejde JWT přečíst (v běžních prohlížečích) a posílá se automaticky v requestu, který musí vést na na stejnou doménu a pouze s HTTPS. V API je pak potřeba číst token z této cookies místo z běžně vyžadované hlavičky Authorization: Bearer ****.

Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)

Komentáře