Uvedení vlastních dvou centů kvůli jednomu problému, který dosud nebyl zmíněn. Zejména souhlasím s tím, co řekl @NickSloan, ale s ještě jednou námitkou.
Mezi klíčem API a heslem je ještě jeden důležitý rozdíl. Klíče API jsou pro váš web jedinečné. Část, díky níž je zabezpečení hesla tak důležité, je sdílení hesla. Pokud někdo získá heslo, které uživatel uložil na váš web, není ohrožen pouze váš web: je to každý jiný web, pro který uživatel toto heslo (a e-mail / uživatelské jméno) použil. Mnoho lidí opakovaně používá hesla na důležitých webech: v bankách, na sociálních médiích, v e-mailech atd., Což znamená, že dobré zabezpečení heslem neznamená ani tak ochranu přístupu na váš web, jako spíše ochranu uživatelů na jiných webech. Nemůžeme nutit uživatele, aby zlepšili zabezpečení, takže musíme předpokládat to nejhorší a podniknout pro ně další kroky k ochraně jejich vlastního soukromí.
Klíč API je úplně jiný scénář, protože je jedinečný pro tvoje stránka. Výsledkem je, že pokud dojde ke krádeži, útočník získá přístup na váš web, ale nezíská nic, co by mohl využít proti bance / e-mailu / atd. Této osoby. To znamená, že úroveň rizika pro klíče API je ve skutečnosti nižší než pro hesla. Nejsou úplně ve stejném parku: klíče API se více podobají identifikátorům relací než heslům.
Pochopení, že se podobají identifikátorům relací více než hesla, poskytuje praktické poznatky o tom, jak je správně chránit. klíče. Následující diskuse se týká klíčů API pro věci, jako jsou přihlašovací údaje OAuth, a nikoli přihlašovací údaje pro šifrování (jak je popsáno v odpovědi @NickSloan).
Největší hrozbou pro hesla jsou phishingové útoky a napadené databáze, a proto je v našich databázích ukládáme hašované. Největší hrozby pro klíče API jsou stejné jako pro klíče relace: slabiny v aplikacích front-end, jako jsou chyby zabezpečení XSS, MIM a podobně. Je důležité si uvědomit, že front-end aplikace potřebuje heslo v nezašifrované podobě, takže hašování klíče API vám ve skutečnosti nezíská nic, když ho osoba, u které je s největší pravděpodobností ukradeno, potřebuje v prostém textu.
Místo toho chráníte identifikátor relace (nebo token OAuth nebo klíč API specifický pro klienta) primárně sledováním klienta. Pokud dojde k odcizení identifikátoru relace prostřednictvím XSS nebo jiným způsobem od klienta, je typickým výsledkem použití tohoto identifikátoru útočníkem na novém zařízení. To znamená, že najednou uvidíte starý klíč přicházející s novým uživatelským agentem. Takovou změnu lze snadno zjistit a opravit: okamžitě zneplatněte všechny klíče API. Zejména v případě požadavků OAuth je to pro uživatele velmi bezbolestné: pouze se přihlásí zpět a okamžitě získají nový, zatímco někdo, kdo pouze ukradl klíč (a nemá heslo), je zpět na rýsovacím prkně .
Toto je dostatečně běžné obranné opatření, že chytřejší hacker se také pokusí zaznamenat uživatelského agenta spojeného s odcizeným klíčem a použít jej ve všech budoucích požadavcích, ale stále můžete snadno vidět, že se něco děje když má stejný uživatel požadavky přicházející z více IP adres. Stejně jako všechno ostatní na světě to může být trochu hra na kočku a myš, ale existuje několik důležitých možností:
- Klíč API / OAuth Token / ID relace je opravdu jen způsob, jak si uživatele zapamatovat na konkrétním zařízení, takže nemusí zadávat své heslo na každou stránku. Výsledkem je, že pokud máte pochybnosti, stačí zabít všechny autorizované klíče a přinutit uživatele, aby se znovu přihlásil.
- Ve všech třech případech, protože ztráta klíče / tokenu / ID vede ke kompromisu účtu, je důležité mít kolem těchto věcí aktivní zabezpečení a detekovat / reagovat, pokud se něco stane. Pokud jste někdy dostali oznámení z facebooku / google / atd. O tom, že se někdo pokouší přihlásit k vašemu účtu z Mexika, je to proto, že bezpečnostní pracovník někde dělá svou práci správně.
- Primární vektory útoku pro klíče / Tokeny / ID se liší od tokenů / hesel. Možná je budete chtít hashovat ve své databázi (opět nemluvíme o šifrovacích pověřeních, která musí být v prostém textu), ale nemůžete je pouze hashovat ve své databázi a nazývat se zabezpečeným. Musíte se ujistit a zabezpečit je proti zcela nové řadě vektorů útoků. Pokud o nich uvažujete pouze jako o heslech, zmeškáte některé důležité části celkového obrazu.