microdot.csrf — CSRF-védelem¶
Elutasítja azokat az állapotmódosító kéréseket, amelyek más oldalról (cross-site) származnak. Az ellenőrzés egy before_request hookként fut, és a böngésző által megadott Sec-Fetch-Site fejlécet használja (az Origin fejléccel mint tartalékkal a régebbi böngészőkhöz, ha egy microdot.cors.CORS példánnyal párosul).
class CSRF¶
- class microdot.csrf.CSRF(app: Microdot | None = None, cors=None, protect_all: bool = True, allow_subdomains: bool = False)¶
- app
A
microdot.Microdotpéldány, amelyre telepíteni kell. Opcionális; hívd meg ainitialize()metódust később, ha nincs megadva.- cors
A
microdot.cors.CORSpéldány, amely az alkalmazás megbízható eredeteit definiálja. Szükséges ahhoz, hogy azOriginfejlécre lehessen visszaesni azoknál a böngészőknél, amelyek nem küldenekSec-Fetch-Sitefejlécet. Opcionális; enélkül csak aSec-Fetch-Siteellenőrzés érvényesül.- protect_all
Ha
True(alapértelmezett), minden útvonal automatikusan védett aGET,HEADésOPTIONSkivételével. Az útvonalak egyenként felmenthetők azexempt()segítségével. HaFalse, alapértelmezetten egy útvonal sincs védve, és az egyes útvonalak aprotect()segítségével kapcsolódnak be.- allow_subdomains
Ha
True, az alkalmazás eredeteinek aldomainjeiről érkező kérések elfogadásra kerülnek (same-siteSec-Fetch-Site, vagy illeszkedő eredet-utótag).
- exempt(f)¶
Dekorátor, amely felment egy útvonalat a CSRF-védelem alól. Helyezd közvetlenül az útvonal-dekorátor után:
@app.post('/webhook') @csrf.exempt async def webhook(request): # accepts cross-site POSTs
- protect(f)¶
Dekorátor, amely kikényszeríti a CSRF-védelmet egy olyan útvonalon, amely egyébként fel lenne mentve (pl. egy
GETútvonal, vagy minden útvonalprotect_all=Falseesetén).
Példa:
from microdot import Microdot
from microdot.cors import CORS
from microdot.csrf import CSRF
app = Microdot()
cors = CORS(app, allowed_origins=['https://app.example.com'])
csrf = CSRF(app, cors=cors)
@app.post('/api/save')
async def save(request):
# automatically CSRF-protected
return {'ok': True}
Egy kérés akkor engedélyezett, ha a Sec-Fetch-Site same-origin vagy none értéket jelez (vagy same-site értéket allow_subdomains=True esetén). Ha a fejléc hiányzik, a kérés Origin értéke a CORS engedélyezőlistájával lesz összevetve. Az egyik fejlécet sem tartalmazó kérések elfogadásra kerülnek (ez a tipikus a közvetlen API-hívásoknál, amelyek nincsenek kitéve a böngészős CSRF-nek).