microdot.csrf — CSRF koruması

Siteler arası kaynaklı durum değiştiren istekleri reddeder. Kontrol bir before_request kancası olarak çalışır ve tarayıcının sağladığı Sec-Fetch-Site başlığını kullanır (bir microdot.cors.CORS örneğiyle eşleştirildiğinde, eski tarayıcılar için Origin başlığı yedek olarak kullanılır).

class CSRF

class microdot.csrf.CSRF(app: Microdot | None = None, cors=None, protect_all: bool = True, allow_subdomains: bool = False)
app

Üzerine kurulacak microdot.Microdot örneği. İsteğe bağlıdır; verilmezse daha sonra initialize() çağrılır.

cors

Uygulamanın güvenilen origin’lerini tanımlayan microdot.cors.CORS örneği. Sec-Fetch-Site göndermeyen tarayıcılarda Origin başlığına geri dönmek için gereklidir. İsteğe bağlıdır; bu örnek olmadan yalnızca Sec-Fetch-Site kontrolü uygulanır.

protect_all

True ise (varsayılan), GET, HEAD ve OPTIONS dışındaki her rota otomatik olarak korunur. Rotalar exempt() ile tek tek muaf tutulabilir. False ise, varsayılan olarak hiçbir rota korunmaz ve tek tek rotalar protect() ile katılır.

allow_subdomains

True ise, uygulamanın origin’lerinin alt alan adlarından gelen istekler kabul edilir (same-site Sec-Fetch-Site veya eşleşen origin son eki).

initialize(app: Microdot, cors=None)

Yapılandırma ertelendiyse app öğesine bağlanır.

exempt(f)

Bir rotayı CSRF korumasından muaf tutan dekoratör. Doğrudan rota dekoratörünün ardına yerleştirin:

@app.post('/webhook')
@csrf.exempt
async def webhook(request):
    # accepts cross-site POSTs
protect(f)

Aksi takdirde muaf olacak bir rotaya (örneğin bir GET rotası veya protect_all=False olduğunda her rota) CSRF korumasını zorlayan dekoratör.

SAFE_METHODS: list

Varsayılan olarak korunmayan metotları listeleyen sınıf özniteliği – ['GET', 'HEAD', 'OPTIONS'].

Örnek:

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}

Sec-Fetch-Site same-origin veya none (veya allow_subdomains=True olduğunda same-site) bildirdiğinde bir isteğe izin verilir. Başlık yoksa, isteğin Origin değeri CORS izin listesine karşı eşleştirilir. Her iki başlık da olmayan istekler kabul edilir (tarayıcı CSRF’sine tabi olmayan doğrudan API çağrıları için tipiktir).