Zkontrolujte bezpečnostní pravidla Firebase podle 26 častých chyb
Vložte bezpečnostní pravidla Firestore, pravidla Firebase Storage nebo pravidla Realtime Database. Kontrola přečte text a ukáže, které cesty dovolují komukoli číst nebo zapisovat.
Výsledek
Jde o statickou analýzu vloženého textu. Nevidí vlastní claims, App Check, tvar dat ani pravidla, která nikdy nebyla nasazena; známka pokrývá jen to, co umí přečíst 26 kontrol.
Co tato kontrola nevidí
Kontrola čte jen vložený text. Nevidí vlastní claims, App Check, tvar vašich dat ani pravidla, která nikdy nebyla nasazena, takže čistý výsledek neznamená, že je projekt bezpečný.
Všech 26 kontrol
| Kontrola | ID | Služba | Závažnost |
|---|---|---|---|
| Kdokoli může zapisovat do Firestore | fs-open-write | Firestore | Kritická |
| Kdokoli může číst z Firestore | fs-open-read | Firestore | Střední |
| Rekurzivní zástupný match je otevřený | fs-recursive-wildcard-open | Firestore | Kritická |
| Pravidla testovacího režimu s datem vypršení | fs-test-mode-expiry | Firestore | Kritická |
| Zapisovat může každý přihlášený uživatel | fs-auth-only-write | Firestore | Vysoká |
| Číst může každý přihlášený uživatel | fs-auth-only-read | Firestore | Střední |
| E-mailu se věří bez email_verified | fs-email-unverified | Firestore | Střední |
| Role se čte z dat požadavku | fs-role-from-request | Firestore | Vysoká |
| Široký zástupný match skrývá přísnější pravidla | fs-wildcard-shadow | Firestore | Vysoká |
| Uživatelé si mohou zapsat vlastní roli (heuristika) | fs-self-role-write | Firestore | Vysoká |
| Zápisy přijímají libovolná pole (heuristika) | fs-write-no-field-guard | Firestore | Střední |
| read není rozdělen na get a list | fs-read-not-split | Firestore | Info |
| Chybí výslovné výchozí zamítnutí | fs-no-default-deny | Firestore | Info |
| Pravidla Firestore se nepodařilo přečíst | fs-parse-error | Firestore | Info |
| Kdokoli může číst soubory ve Storage | st-open-read | Storage | Střední |
| Kdokoli může zapisovat do Storage | st-open-write | Storage | Kritická |
| Match {allPaths=**} je otevřený | st-recursive-wildcard-open | Storage | Kritická |
| Zapisovat do Storage může každý přihlášený uživatel | st-auth-only-write | Storage | Vysoká |
| Pravidla Storage se nepodařilo přečíst | st-parse-error | Storage | Info |
| Celou databázi může číst kdokoli | db-root-read-open | Realtime Database | Kritická |
| Do celé databáze může zapisovat kdokoli | db-root-write-open | Realtime Database | Kritická |
| Uzel může číst kdokoli | db-open-read | Realtime Database | Střední |
| Do uzlu může zapisovat kdokoli | db-open-write | Realtime Database | Vysoká |
| Pravidlo potomka přebíjí rodič | db-cascade-override | Realtime Database | Vysoká |
| Jakýkoli přihlášený uživatel může číst nebo zapisovat celou databázi | db-auth-only-root | Realtime Database | Vysoká |
| Pravidla Realtime Database se nepodařilo přečíst | db-parse-error | Realtime Database | Info |
Otázky
Na co se kontrola pravidel Firebase dívá?
Čte bezpečnostní pravidla Firebase, která vložíte pro Firestore, Cloud Storage a Realtime Database, a hledá pravidla, která dovolují komukoli číst nebo zapisovat, pravidla vyžadující jen přihlášeného uživatele, důvěru ve vstup z klienta a podobné vzory.
Ukládá se text mých pravidel?
Ne. Pravidla se zpracují v paměti v síti Cloudflare a po odeslání odpovědi se zahodí. Spolu s textem se nic neukládá ani nezaznamenává.
Kolik toho mohu vložit?
Celkem až 48,000 znaků ve všech třech polích. Pokud jsou vaše pravidla delší, vložte část, kterou chcete zkontrolovat.
Proč může být veřejné čtení v pořádku?
Některá data jsou veřejná záměrně, třeba katalog produktů nebo články na blogu. U Firestore a Storage kontrola počítá čtení bez podmínky jako střední problém a strhne 10 bodů, protože nemůže vědět, zda jsou data soukromá. Pokud jsou data veřejná záměrně, můžete tuto cenu přijmout. Jen v kořeni Realtime Database hodnotí otevřené čtení jako závažnější.
Co jsou pravidla testovacího režimu?
Když vytvoříte databázi Firestore v testovacím režimu, konzole zapíše pravidlo, které do určitého data povoluje všechno, pomocí request.time. Do toho data může kdokoli číst i zapisovat; potom je všechno zakázáno a aplikace přestane fungovat. Před spuštěním ho nahraďte skutečnými podmínkami.
Jak se v Realtime Database dědí pravidla?
V Realtime Database platí pravidlo, které uděluje přístup, pro vše pod ním a potomek ho nemůže vzít zpět. Přísnější pravidlo na potomkovi pod povolným rodičem se nikdy neuplatní, proto ho kontrola hlásí.
Co znamená známka?
Shrnuje jen to, co kontroly umí přečíst ve vloženém textu: skóre ze 100 mínus trest za každou neúspěšnou kontrolu, určený nejzávažnějším problémem, který tato kontrola našla, a jakýkoli kritický problém je F. Střední položka může být také heuristika, která žádá o ruční ověření, protože samotný text neukáže, zda jde o skutečný problém. Známka A nedokazuje, že je projekt zabezpečený, protože vlastní claims, App Check i samotná data jsou mimo dosah.