ForgeTotal.js 5
de

Total.js 5

Fehlversuche mit BLOCKED begrenzen

Total.js 5 · total5@0.0.19 securityrate-limiting Mit Total.js 5 ausgeführt

BLOCKED($, limit, expiration) zählt Aufrufe pro IP-Adresse. Es gibt true zurück, sobald die Adresse innerhalb der Ablaufzeit mehr als limit Aufrufe gemacht hat (Standard: 5 Aufrufe in 15 Minuten), und davor undefined. Rufe es am Anfang eines sensiblen Handlers auf und brich ab, wenn es true zurückgibt. Um eine Adresse nach einem erfolgreichen Login freizusprechen, rufe BLOCKED($, -1) auf.

Die Zähler leben im Speicher des Prozesses; stelle hinter einem Reverse-Proxy sicher, dass die echte Client-Adresse Total.js erreicht, sonst teilen sich alle einen Zähler.

controllers/login.js
exports.install = function() {
	ROUTE('POST /login/', login);
};

function login($) {

	if (BLOCKED($, 3, '1 minute')) {
		$.invalid(429);
		return;
	}

	if ($.body.password === 'correct') {
		BLOCKED($, -1);
		$.json({ ok: true });
	} else
		$.invalid(401);
}