microdot.csrf --- Perlindungan CSRF¶
Menolak permintaan yang mengubah status yang berasal dari lintas situs. Pemeriksaan berjalan sebagai hook before_request dan menggunakan header Sec-Fetch-Site yang disediakan browser (dengan header Origin sebagai fallback untuk browser lama, ketika dipasangkan dengan instans microdot.cors.CORS).
class CSRF¶
- class microdot.csrf.CSRF(app: Microdot | None = None, cors=None, protect_all: bool = True, allow_subdomains: bool = False)¶
- app
Instans
microdot.Microdotyang akan diinstall. Opsional; panggilinitialize()nanti jika tidak diberikan.- cors
Instans
microdot.cors.CORSyang mendefinisikan asal tepercaya aplikasi. Diperlukan untuk fallback ke headerOriginpada browser yang tidak mengirimkanSec-Fetch-Site. Opsional; tanpanya, hanya pemeriksaanSec-Fetch-Siteyang berlaku.- protect_all
Jika
True(default), setiap rute kecualiGET,HEAD, danOPTIONSdilindungi secara otomatis. Rute dapat dikecualikan secara individual denganexempt(). JikaFalse, tidak ada rute yang dilindungi secara default dan rute individual ikut serta denganprotect().- allow_subdomains
Jika
True, permintaan dari subdomain asal aplikasi diterima (same-siteSec-Fetch-Site, atau akhiran asal yang cocok).
- exempt(f)¶
Dekorator yang mengecualikan rute dari perlindungan CSRF. Letakkan langsung setelah dekorator rute:
@app.post('/webhook') @csrf.exempt async def webhook(request): # accepts cross-site POSTs
- protect(f)¶
Dekorator yang memaksa perlindungan CSRF pada rute yang sebaliknya akan dikecualikan (mis. rute
GETatau setiap rute saatprotect_all=False).
Contoh:
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}
Permintaan diizinkan ketika Sec-Fetch-Site melaporkan same-origin atau none (atau same-site ketika allow_subdomains=True). Jika header tidak ada, Origin permintaan dicocokkan dengan daftar izin CORS. Permintaan tanpa header mana pun diterima (tipikal untuk panggilan API langsung yang tidak tunduk pada CSRF browser).