ForgeTotal.js 5
bg

Total.js 5

Защитете формулярите и заявките с CSRF токени

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Изпълнено с Total.js 5

CSRF атаката кара браузъра на влязъл потребител да изпрати заявка, която той никога не е възнамерявал. Защитата е токен, който страницата получава от вашия сървър и който трябва да се върне с всяка заявка, променяща данни. Total.js създава и проверява токена вместо вас, но само когато secret_csrf е зададен във файла config (без него проверката винаги минава).

$.csrf() връща токен (а @{csrf} го отпечатва във view). Това е криптирана стойност, свързана с IP адреса и user agent на клиента, която изтича след времето в $csrfexpiration (30 минути по подразбиране). DEF.onCSRFcheck($) проверява върнатия токен, прочетен от хедъра x-csrf-token или от параметъра csrf на query string, и връща true или false. При обикновените маршрути го извиквате вие, най-удобно от middleware, който добавяте с #csrf към всеки маршрут, променящ данни. WebSocket маршрутите с флага @csrf се проверяват автоматично.

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