Limitare i tentativi falliti con BLOCKED
BLOCKED($, limit, expiration) conta le chiamate per indirizzo IP. Restituisce true quando l'indirizzo ha fatto più di limit chiamate entro la scadenza (predefinito: 5 chiamate in 15 minuti), e undefined prima. Chiamalo all'inizio di un handler sensibile e fermati quando restituisce true. Per perdonare un indirizzo dopo un login riuscito chiama BLOCKED($, -1).
I contatori vivono nella memoria del processo; dietro un reverse proxy assicurati che l'indirizzo reale del client arrivi a Total.js, altrimenti tutti condividono un unico contatore.
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);
}