Skydda formulär och förfrågningar med CSRF-token
En CSRF-attack får en inloggad användares webbläsare att skicka en förfrågan som den aldrig avsåg. Försvaret är en token som sidan får från din server och som måste komma tillbaka med varje förfrågan som ändrar data. Total.js skapar och verifierar token åt dig, men bara när secret_csrf är satt i filen config (utan den lyckas kontrollen alltid).
$.csrf() returnerar en token (och @{csrf} skriver ut den i en vy). Det är ett krypterat värde knutet till klientens IP-adress och user agent som löper ut efter tiden i $csrfexpiration (30 minuter som standard). DEF.onCSRFcheck($) verifierar den token som kommit tillbaka, läst från headern x-csrf-token eller query-parametern csrf, och returnerar true eller false. För vanliga rutter anropar du den själv, smidigast från en middleware som du lägger till med #csrf på varje rutt som ändrar data. WebSocket-rutter med flaggan @csrf kontrolleras automatiskt.
secret_csrf : change-this-secret-in-productionMIDDLEWARE('csrf', function($, next) {
if (DEF.onCSRFcheck($))
next();
else
$.invalid(403);
});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 });
}