ForgeTotal.js 5
el

Total.js 5

Προστατέψτε φόρμες και αιτήματα με tokens CSRF

Total.js 5 · total5@0.0.19 securitycsrfmiddleware Εκτελέστηκε με το Total.js 5

Μια επίθεση CSRF κάνει τον περιηγητή ενός συνδεδεμένου χρήστη να στείλει ένα αίτημα που ποτέ δεν σκόπευε. Η άμυνα είναι ένα token που η σελίδα λαμβάνει από τον διακομιστή σας και που πρέπει να επιστρέφει με κάθε αίτημα που αλλάζει δεδομένα. Το Total.js δημιουργεί και επαληθεύει το token για εσάς, αλλά μόνο όταν το secret_csrf είναι ορισμένο στο αρχείο config (χωρίς αυτό ο έλεγχος περνά πάντα).

Το $.csrf() επιστρέφει ένα token (και το @{csrf} το εκτυπώνει σε ένα view). Είναι μια κρυπτογραφημένη τιμή συνδεδεμένη με τη διεύθυνση IP και το user agent του πελάτη, που λήγει μετά τον χρόνο του $csrfexpiration (30 λεπτά από προεπιλογή). Το DEF.onCSRFcheck($) επαληθεύει το token που επέστρεψε, διαβασμένο από την κεφαλίδα 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 });
}