ForgeTotal.js 5
cs

Total.js 5

Chraňte formuláře a požadavky tokeny CSRF

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Spuštěno s Total.js 5

Útok CSRF způsobí, že prohlížeč přihlášeného uživatele odešle požadavek, který nikdy nechtěl odeslat. Obranou je token, který stránka dostane od vašeho serveru a který se musí vrátit s každým požadavkem měnícím data. Total.js token vytváří i ověřuje za vás, ale jen pokud je v souboru config nastaveno secret_csrf (bez něj kontrola vždy projde).

$.csrf() vrací token (a @{csrf} ho vypíše v pohledu). Je to šifrovaná hodnota vázaná na IP adresu a user agent klienta, která vyprší po době v $csrfexpiration (ve výchozím nastavení 30 minut). DEF.onCSRFcheck($) ověří token, který se vrátil, přečtený z hlavičky x-csrf-token nebo z parametru csrf v query stringu, a vrátí true nebo false. U běžných tras ji voláte sami, nejpohodlněji z middleware, který přidáte pomocí #csrf ke každé trase měnící data. Trasy WebSocket s příznakem @csrf se 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 });
}