ForgeTotal.js 5
de

Total.js 5

Formulare und Anfragen mit CSRF-Tokens schützen

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Mit Total.js 5 ausgeführt

Ein CSRF-Angriff lässt den Browser eines angemeldeten Benutzers eine Anfrage senden, die er nie beabsichtigt hat. Die Abwehr ist ein Token, das die Seite von deinem Server erhält und das mit jeder zustandsändernden Anfrage zurückkommen muss. Total.js erzeugt und prüft das Token für dich, aber nur, wenn secret_csrf in der Datei config gesetzt ist (ohne es besteht die Prüfung immer).

$.csrf() gibt ein Token zurück (und @{csrf} gibt es in einer View aus). Es ist ein verschlüsselter Wert, der an die IP-Adresse und den User-Agent des Clients gebunden ist und nach der Zeit in $csrfexpiration abläuft (standardmäßig 30 Minuten). DEF.onCSRFcheck($) prüft das zurückgekommene Token, gelesen aus dem Header x-csrf-token oder dem Query-String-Parameter csrf, und gibt true oder false zurück. Bei gewöhnlichen Routen rufst du es selbst auf, am bequemsten aus einer Middleware, die du mit #csrf an jede Route hängst, die Daten ändert. WebSocket-Routen mit dem Flag @csrf werden automatisch geprüft.

config
secret_csrf : change-this-secret-in-production
definitions/csrf.js
MIDDLEWARE('csrf', function($, next) {
	if (DEF.onCSRFcheck($))
		next();
	else
		$.invalid(403);
});
controllers/csrf.js
exports.install = function() {
	ROUTE('GET /form/', form);
	ROUTE('POST /transfer/ @json #csrf', transfer);
};

function form($) {
	$.json({ csrf: $.csrf() });
}

function transfer($) {
	$.json({ ok: true, amount: $.body.amount });
}