Limita los intentos fallidos con BLOCKED
BLOCKED($, limit, expiration) cuenta las llamadas por dirección IP. Devuelve true cuando la dirección ha hecho más de limit llamadas dentro de la caducidad (por defecto: 5 llamadas en 15 minutos), y undefined antes de eso. Llámalo al principio de un manejador sensible y detente cuando devuelva true. Para perdonar a una dirección tras un login correcto llama a BLOCKED($, -1).
Los contadores viven en la memoria del proceso; detrás de un proxy inverso asegúrate de que la dirección real del cliente llegue a Total.js, o todos compartirán un único contador.
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);
}