ForgeTotal.js 5
sk

Total.js 5

Chráňte formuláre a požiadavky tokenmi CSRF

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Spustené s Total.js 5

Útok CSRF spôsobí, že prehliadač prihláseného používateľa odošle požiadavku, ktorú nikdy nechcel odoslať. Obranou je token, ktorý stránka dostane od vášho servera a ktorý sa musí vrátiť s každou požiadavkou meniacou dáta. Total.js token vytvára aj overuje za vás, ale iba ak je v súbore config nastavené secret_csrf (bez neho kontrola vždy prejde).

$.csrf() vráti token (a @{csrf} ho vypíše v pohľade). Je to šifrovaná hodnota viazaná na IP adresu a user agent klienta a vyprší po čase v $csrfexpiration (predvolene 30 minút). DEF.onCSRFcheck($) overí token, ktorý sa vrátil, prečítaný z hlavičky x-csrf-token alebo z parametra csrf v query stringu, a vráti true alebo false. Pri bežných trasách ju voláte sami, najpohodlnejšie z middleware, ktorý pridáte pomocou #csrf ku každej trase meniacej dáta. Trasy WebSocket s príznakom @csrf sa kontrolujú automaticky.

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