microdot.csrf — CSRF-suojaus¶
Hylkää tilaa muuttavat pyynnöt, jotka ovat peräisin eri sivustolta. Tarkistus suoritetaan before_request-koukkuna ja se käyttää selaimen toimittamaa Sec-Fetch-Site-otsaketta (sekä Origin-otsaketta varajärjestelynä vanhemmille selaimille, kun se on yhdistetty microdot.cors.CORS-instanssiin).
class CSRF¶
- class microdot.csrf.CSRF(app: Microdot | None = None, cors=None, protect_all: bool = True, allow_subdomains: bool = False)¶
- app
microdot.Microdot-instanssi, johon asennetaan. Valinnainen; kutsuinitialize()myöhemmin, jos sitä ei anneta.- cors
microdot.cors.CORS-instanssi, joka määrittää sovelluksen luotetut alkuperät. VaaditaanOrigin-otsakkeeseen turvautumiseen selaimilla, jotka eivät lähetäSec-Fetch-Site-otsaketta. Valinnainen; ilman sitä vainSec-Fetch-Site-tarkistus on käytössä.- protect_all
Jos
True(oletus), jokainen reitti paitsiGET,HEADjaOPTIONSsuojataan automaattisesti. Reittejä voidaan vapauttaa yksitellen metodillaexempt(). JosFalse, mitään reittejä ei suojata oletuksena ja yksittäiset reitit liittyvät mukaan metodillaprotect().- allow_subdomains
Jos
True, sovelluksen alkuperien aliverkkotunnuksista tulevat pyynnöt hyväksytään (same-siteSec-Fetch-Site tai täsmäävä alkuperän pääte).
- exempt(f)¶
Dekoraattori, joka vapauttaa reitin CSRF-suojauksesta. Sijoita se suoraan reittidekoraattorin jälkeen:
@app.post('/webhook') @csrf.exempt async def webhook(request): # accepts cross-site POSTs
- protect(f)¶
Dekoraattori, joka pakottaa CSRF-suojauksen reitille, joka muuten olisi vapautettu (esim.
GET-reitti tai jokainen reitti, kunprotect_all=False).
Esimerkki:
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}
Pyyntö sallitaan, kun Sec-Fetch-Site raportoi same-origin tai none (tai same-site, kun allow_subdomains=True). Jos otsake puuttuu, pyynnön Origin täsmätään CORS-sallittujen listaa vasten. Pyynnöt, joista molemmat otsakkeet puuttuvat, hyväksytään (tyypillistä suorille API-kutsuille, joita selaimen CSRF ei koske).