Nene, naštěstí jste se vrátil do zajetých kolejí a opět se pletete
Co takový index.php nebo router.php může dělat:
- routovat požadavek
- provádět include
- posílat dotaz do databáze, jestli daný klíč vůbec existuje
- logovat každou z jednotlivých položek
Pokud tam implementuji jednoduchou paritu (která nebude zjevná), mohu požadavek zahodit dřív, než se začnu připojovat do databáze a dělat ostatní kraviny.
Pro začátek vynecháme věci, které s ověřením klíče nijak nesouvisí. Takže pokud bude klíč náhodně generovaný řetězec, bude ověření klíče znamenat najít ho v seznamu vydaných klíčů. Vzhledem k tomu, že podle dotazu předpokládám tak desítky nebo stovky uživatelů, celá „databáze“ klíčů se vejde do paměti jako vyhledávací strom nebo hash tabulka.
Pokud by klíč bylo JWT, znamená to dekódovat reperezentaci klíče, ověřit podpis (předpokládejme rychlejší variantu s hashem). Pokud bude podpis platný, dekódujeme data z JWT, získáme identifikátor – a ten už můžeme hledat v databázi klíčů jako v předcházejícím případě. Pro oprávněného uživatele je to mnohem delší cesta, pro někoho, kdo jen zkouší náhodné klíče, to s tím dekódováním a hashováním nejspíš bude také delší, než jednoduché vyhledávání.
Pokud by tam nebylo JWT, ale „jednoduchá parita, která nebude zjevná“, je to učebnicový příklad security through obscurity.
Ale hlavně, pokud někdo na prostor klíčů třeba 2
256 zkouší útočit hrubou silou, buď protože si neodhadl, jak velký ten prostor může být, nebo protože tomu nerozumí – pak je to nějaké tele, které bude možné jednoduše eliminovat blokací jedné IP adresy na firewallu.