ForgeTotal.js 5
it

Total.js 5

Proteggere moduli e richieste con i token CSRF

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Eseguita con Total.js 5

Un attacco CSRF fa inviare al browser di un utente autenticato una richiesta che non voleva fare. La difesa è un token che la pagina riceve dal tuo server e che deve tornare con ogni richiesta che modifica dati. Total.js crea e verifica il token per te, ma solo se secret_csrf è impostato nel file config (senza di esso il controllo passa sempre).

$.csrf() restituisce un token (e @{csrf} lo stampa in una vista). È un valore cifrato legato all'indirizzo IP e allo user agent del client e scade dopo il tempo indicato in $csrfexpiration (30 minuti per impostazione predefinita). DEF.onCSRFcheck($) verifica il token tornato, letto dall'header x-csrf-token o dal parametro csrf della query string, e restituisce true o false. Per le rotte normali lo chiami tu, nel modo più comodo da un middleware che aggiungi con #csrf a ogni rotta che modifica dati. Le rotte WebSocket con il flag @csrf vengono controllate automaticamente.

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 });
}