ForgeTotal.js 5
pl

Total.js 5

Chroń formularze i żądania tokenami CSRF

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Uruchomiono z Total.js 5

Atak CSRF sprawia, że przeglądarka zalogowanego użytkownika wysyła żądanie, którego nigdy nie zamierzał wysłać. Obroną jest token, który strona otrzymuje z Twojego serwera i który musi wrócić z każdym żądaniem zmieniającym dane. Total.js tworzy i weryfikuje token za Ciebie, ale tylko gdy w pliku config ustawiono secret_csrf (bez niego sprawdzenie zawsze przechodzi).

$.csrf() zwraca token (a @{csrf} wypisuje go w widoku). To zaszyfrowana wartość powiązana z adresem IP i user agentem klienta, która wygasa po czasie z $csrfexpiration (domyślnie 30 minut). DEF.onCSRFcheck($) weryfikuje token, który wrócił, odczytany z nagłówka x-csrf-token lub z parametru csrf w query stringu, i zwraca true lub false. W zwykłych trasach wywołujesz ją sam, najwygodniej z middleware, który dodajesz przez #csrf do każdej trasy zmieniającej dane. Trasy WebSocket z flagą @csrf są sprawdzane automatycznie.

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