ForgeTotal.js 5
nl

Total.js 5

Mislukte pogingen beperken met BLOCKED

Total.js 5 · total5@0.0.19 securityrate-limiting Uitgevoerd met Total.js 5

BLOCKED($, limit, expiration) telt aanroepen per IP-adres. Het geeft true terug zodra het adres meer dan limit aanroepen heeft gedaan binnen de verlooptijd (standaard: 5 aanroepen in 15 minuten), en daarvoor undefined. Roep het aan het begin van een gevoelige handler aan en stop als het true geeft. Om een adres na een geslaagde login te vergeven, roep je BLOCKED($, -1) aan.

De tellers leven in het geheugen van het proces; zorg er achter een reverse proxy voor dat het echte clientadres Total.js bereikt, anders delen alle gebruikers één teller.

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