Filip, nie je to uplne tak a JWT nemozno pouzit lebo tieto tokeny musia byt pouzitelne iba raz, takze drzat nieco v cache sa nevyhnem a JWT straca vyznam kedze ma sice "not before" a "valild until", lenze staci len vyckat na dobu kedy je platny a potom urobit utok, cize nema skratka v tomto kontexte ziaden prinos lebo pravidla su ze token musi mat platnost od, do a moze byt pouzity iba raz. A tento stejt(pouzitie len raz) musi teda drzat server a nie klient(co je pripad jwt).
Nemá smysl vydávat tokeny použitelné jenom jednou, když si jich každý může nechat vytvořit, kolik chce.
3. A robi programove prihlasenie ale s kazdym requestom musi cakat dlhsiu dobu takze jeh pokusy o prihlasnei budu "throttlovane"
Ne, útočník na nic čekat nemusí. Útočník si nechá každou vteřinu vygenerovat třeba sto tokenů, počká pět vteřin (za tu dobu nastřádá 500 tokenů), a pak už si vždycky jen ze zásoby tokenů, které má vygenerované, vybere takový, který je zrovna platný. Každou vteřinu mu přibude dalších sto tokenů, takže má neustále z čeho vybírat.
Tuna by potom musela do toho este vstupit IP adresa aby sa serializovala fronta a teda cakacia doba by bola podla cakajucich z IP adresy a nie globalne podla poctu vsetkych cakajucich.
Takže to omezení nakonec uděláte na IP adresu. A můžete celou tu šarádu s tokeny a prostě budete limitovat počet přihlášení z jedné IP adresy.
Ak by utocnik pouzil viacero strojov na utok, tak kazdy taky stroj by bol nasledne takto "serializovany" a teda by nemohol aj tak utocit paralelne, inak povedane jeden utocnik moze utocit iba z jedneho stroju kde sa mu podla ip kontroluje kolko requestov moze robit a teda moze utok paralizovat iba viacero strojmi kde ale kazdy stroj stale moze skusat len serializovane.
Ne, útočník může útočit paralelně z více strojů, protože vy nevíte, že je to pořád ten samý útočník.
Představte si to tak, že útočník začíná už s tím, že čekací doba je maximální, tedy 5 sekund. (Tohoto stavu není pro útočníka problém dosáhnout.) Když útočník získá každou vteřinu tři tokeny (označím je písmeny a v závorce bude, od kolikáté sekundy platí), bude jeho zásoba tokenů postupně vypadat takhle:
1. A(5), B(5), C(5)
2. A(5), B(5), C(5), D(6), E(6), F(6)
3. A(5), B(5), C(5), D(6), E(6), F(6), G(7), H(7), I(7)
4. A(5), B(5), C(5), D(6), E(6), F(6), G(7), H(7), I(7), J(8), K(8), L(8)
5. D(6), E(6), F(6), G(7), H(7), I(7), J(8), K(8), L(8), M(9), N(9), O(9)
6. G(7), H(7), I(7), J(8), K(8), L(8), M(9), N(9), O(9), P(10), Q(10), R(10)
7. J(8), K(8), L(8), M(9), N(9), O(9), P(10), Q(10), R(10), S(11), T(11), U(11)
TJ. v 5. vteřině už mohl použít tři tokeny A, B, C, v 6. D, E , F atd. Tj. každou vteřinu tři token získá a tři může použít. Když mu to nebude stačit, získá každou vteřinu třeba 10, 100, 1 000 nebo 1 000 000 tokenů – podle toho, jak tlustou bude mít linku, jak tlustou linku budete mít vy a kolik unese váš server.
No a tohle celé může útočník spustit paralelně z kolika IP adres chce.
Jediné, čeho vaším způsobem docílíte, je to, že začátek útoku posunete maximálně o 5 vteřin (o ten maximální čas, který tokenům nastavíte). Tak dlouho bude trvat, než útočník bude moci použít první token, který získal.
Nezapomínejte na to, že když útočník není nijak identifikovaný, nic mu nebrání získat v každém okamžiku tolik tokenů, kolik jich váš server dokáže vydat. A že i když útočník tokeny používá, nic mu nebrání vedle získávat další tokeny.