Osvedčené bezpečnostné postupy v Xano
Xano poskytuje infraštruktúru aplikácie. Vy zodpovedáte za nastavenie autentifikácie, oprávnení a logiky, ktorá chráni vaše dáta.
Pri bezpečnostnom audite Xano hľadáme bezpečnostné chyby vo vašej aplikácii. Môžeme ho spojiť s auditom WeWebu.
Bezpečnosť potrebuje viac kontrol
- Identita Kto posiela požiadavku?
- Oprávnenia Môže táto osoba vykonať danú akciu?
- Rozsah dát Ku ktorým záznamom má požiadavka prístup?
1. Autentifikácia
Autentifikácia určí, kto posiela požiadavku. Platný token je len prvá kontrola. Backend musí ešte rozhodnúť, ktoré akcie a záznamy smie tento človek používať.
- Neodkladajte to: Súkromné endpointy zabezpečte od začiatku.
- Ako to nastaviť: Na každom súkromnom endpointe vyžadujte prihlásenie a overte požiadavku bez tokenu. Tvorbu tokenov a ochranu endpointov vysvetľuje návod Xano na autentifikáciu.
2. Nastavenia CORS
CORS (Cross-Origin Resource Sharing) určuje, či prehliadač dovolí stránke prečítať odpoveď z iného pôvodu. Nenahrádza autentifikáciu API a neblokuje každú požiadavku medzi doménami. Rozdiel vysvetľuje dokumentácia MDN.
- Prečo na tom záleží: V hlavičke
Access-Control-Allow-Originnastavte frontendy, ktoré smú čítať odpovede v prehliadači. Iní klienti môžu endpoint stále volať, preto potrebuje autorizáciu na serveri. - Poznámka: CORS sa týka len požiadaviek z prehliadača. Volania zo servera (napríklad z Xano do Xano) neobmedzuje.
- Ako to nastaviť: Otvorte svoju API Group -> More options -> CORS Management.
3. UUID vs. celočíselné ID
Náhodne vytvorené UUID (Universally Unique Identifier) sa odhaduje ťažšie než sekvenčné celočíselné ID (integer).
- Prínos pre bezpečnosť: Sekvenčné ID sa ľahko skúšajú jedno po druhom. Náhodné UUID sťažuje hádanie, ale bez kontroly oprávnení záznam neochráni ani jeden formát. OWASP odporúča overiť prístup ku každému požadovanému objektu.
- Čo za to zaplatíte:
- Úložisko: UUID v PostgreSQL zaberá 16 bajtov; veľkosť celého čísla závisí od zvoleného typu.
- Výkon: Pri veľkých tabuľkách (stovky miliónov záznamov) môžu byť indexy nad UUID o niečo pomalšie.
- Úložisko v Xano: Väčšie indexy zaberú väčšiu časť vašej kvóty „Database SSD Storage“.
4. ID používateľa v API
Pri úprave vlastného profilu určite cieľového používateľa z overeného prihlásenia. Administrátorská akcia, ktorá prijíma ID iného používateľa, potrebuje samostatnú kontrolu oprávnení.
- Zraniteľnosť: Ak API dôveruje vstupnému
user_idbez kontroly oprávnení, používateľ so zlým úmyslom ho môže prepísať a meniť cudzie dáta. - Riešenie: Používateľa, ktorý posiela požiadavku, vždy identifikujte cez
auth.id(ID uložené v zabezpečenom autentifikačnom tokene).
Úprava vlastného profilu
- Overená požiadavka
- Načítajte auth.id
- Vyberte vlastný záznam
- Uložte povolené zmeny
5. Sila hesla na backende
Pravidlá hesiel vynucujte na backende pri každom vytvorení alebo zmene hesla. Podporujte dlhé heslové frázy a správcov hesiel. Ak to vaše prihlasovanie umožňuje, odmietajte bežné alebo uniknuté heslá. Samotné povinné špeciálne znaky nenahradia dĺžku, obmedzenie pokusov a viacfaktorové overenie. Podrobnosti uvádza návod OWASP na autentifikáciu.
6. Jednotné chybové hlášky
Podľa odporúčaní OWASP (Open Web Application Security Project) by prihlásenie ani obnova hesla nemali prezradiť, či konkrétna e-mailová adresa vo vašom systéme existuje.
- Zlý príklad: „E-mail sa nenašiel“ alebo „Nesprávne heslo“ (z týchto dvoch hlášok útočník spozná, či e-mail existuje).
- Dobrý príklad: „Nesprávny e-mail alebo heslo“.
Pri obnove hesla použite napríklad „Ak účet existuje, pošleme pokyny na obnovenie hesla.“ Rovnakú informáciu nesmú prezradiť ani stavové kódy alebo výrazne odlišný čas odpovede.
- Prečo: Všeobecné hlášky obmedzujú informácie využiteľné pri tzv. „user enumeration“. Pri nej útočník skúša zoznamy e-mailov a zisťuje, kto má na vašej platforme účet.
Čo prezradí chyba prihlásenia
| Detail o účte | Všeobecná odpoveď | |
|---|---|---|
| Hlásenie | E-mail sa nenašiel / nesprávne heslo | Neplatný e-mail alebo heslo |
| Prezradená informácia | Či účet existuje | Len to, že prihlásenie zlyhalo |
7. Prístup k dokumentácii Swagger
Xano automaticky generuje dokumentáciu Swagger (interaktívnu mapu vášho API). Rozhodnite, či ide o verejné alebo interné API. Internú dokumentáciu podľa potreby obmedzte, no každý endpoint chráňte aj vtedy, keď je jeho dokumentácia skrytá.
- Nastavenie: Prístup k dokumentácii Swagger obmedzíte v API Group Settings.
8. Riadenie prístupu podľa rolí (RBAC)
Ak má aplikácia viac používateľských rolí (napr. admin, manažér, používateľ), potrebuje kontrolovať oprávnenia pri každej požiadavke.
Kam patria kontroly oprávnení
Frontend môže pre prehľadnosť skryť nedostupné akcie. Skutočné pravidlo musí pri každej požiadavke vynucovať backend.
Načítanie rolí z databázy poskytne aktuálne údaje. Cez Xano token extras môžete prenášať napríklad rolu alebo organizáciu a ušetriť niektoré dopyty. Token však zachytáva stav pri vydaní: zmena roly v databáze už vydaný token neprepíše. Podobne môžu zastarať aj oprávnenia v cache.
Dĺžku platnosti, obnovovanie a zneplatňovanie prispôsobte tomu, ako rýchlo musí odobratie prístupu začať platiť. Cache oddeľte podľa používateľa a organizácie. Okrem roly overujte aj prístup ku konkrétnemu záznamu.
Oprávnenia sa musia dať aj zmeniť
- Udeliť prístup
- Kontrolovať požiadavky
- Zmeniť alebo odobrať
- Obnoviť či zneplatniť