microdot.csrf — CSRF-skydd¶
Avvisar tillståndsändrande begäranden som har sitt ursprung från en annan webbplats. Kontrollen körs som en before_request-hook och använder det webbläsarlämnade huvudet Sec-Fetch-Site (med huvudet Origin som reserv för äldre webbläsare, när det paras med en microdot.cors.CORS-instans).
class CSRF¶
- class microdot.csrf.CSRF(app: Microdot | None = None, cors=None, protect_all: bool = True, allow_subdomains: bool = False)¶
- app
Instansen
microdot.Microdotatt installera på. Valfri; anropainitialize()senare om den inte anges.- cors
Instansen
microdot.cors.CORSsom definierar applikationens betrodda ursprung. Krävs för att falla tillbaka på huvudetOriginpå webbläsare som inte skickarSec-Fetch-Site. Valfri; utan den gäller endast kontrollen avSec-Fetch-Site.- protect_all
Om
True(standard) skyddas varje rutt utomGET,HEADochOPTIONSautomatiskt. Rutter kan undantas individuellt medexempt(). OmFalseskyddas inga rutter som standard och enskilda rutter ansluter sig medprotect().- allow_subdomains
Om
Trueaccepteras begäranden från subdomäner till applikationens ursprung (same-siteSec-Fetch-Site, eller matchande ursprungssuffix).
- exempt(f)¶
Dekorator som undantar en rutt från CSRF-skydd. Placera den direkt efter rutt-dekoratorn:
@app.post('/webhook') @csrf.exempt async def webhook(request): # accepts cross-site POSTs
- protect(f)¶
Dekorator som framtvingar CSRF-skydd på en rutt som annars skulle vara undantagen (t.ex. en
GET-rutt eller varje rutt närprotect_all=False).
Exempel:
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}
En begäran tillåts när Sec-Fetch-Site rapporterar same-origin eller none (eller same-site när allow_subdomains=True). Om huvudet saknas matchas begärans Origin mot CORS-tillåtelselistan. Begäranden med inget av huvudena accepteras (typiskt för direkta API-anrop som inte omfattas av webbläsarbaserad CSRF).