Protection CSRF
Dans les formulaires Runique
Quand vous utilisez {% form.xxx %}, le CSRF est inclus automatiquement. Pas besoin de l'ajouter manuellement.
Dans les formulaires HTML manuels
<form method="post" action="/submit">
{% csrf %}
<input type="text" name="data">
<button type="submit">Envoyer</button>
</form>
Pour les requêtes AJAX
const csrfToken = document.querySelector('[name="csrf_token"]').value;
fetch('/api/endpoint', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
},
body: JSON.stringify(data)
});
Chemins exemptés (webhooks, APIs)
Certains endpoints reçoivent des POST sans token CSRF — webhooks Stripe, callbacks tiers, APIs JSON appelées par d'autres serveurs.
Utilisez .csrf_exempt() pour bypasser la validation CSRF sur des chemins spécifiques :
.middleware(|m| {
m.with_csrf()
.csrf_exempt(vec!["/webhook/stripe", "/api/callback"])
})
La correspondance est exacte — /webhook/stripe n'exempte pas /webhook/stripe/sub.
Après avoir exempté un chemin, vérifiez l'authenticité de la requête par d'autres moyens dans votre handler (ex : HMAC-SHA256 sur l'en-tête
Stripe-Signaturepour les webhooks Stripe).