tutorial proyecto node example crear javascript node.js rate-limiting express

javascript - proyecto - node js install express windows



LĂ­mite de velocidad para evitar el comportamiento malicioso en ExpressJS (1)

Alguien me hizo conocer algunos fallos en una aplicación en la que estoy trabajando (principalmente dentro de mi JavaScript en el front-end), que deja abierta la posibilidad de, digamos, hacer clic en una tonelada de botones a la vez y enviar un montón de transacciones correos electrónicos Esto claramente no es bueno.

Creo que una forma de manejar esto en ExpressJS es mediante el uso de app.all() para contar la cantidad de solicitudes que suceden dentro de un determinado período de tiempo. Guardaría esto en los metadatos de la sesión con marcas de tiempo, y si ocurren más de X solicitudes en el tiempo Y, las cortaré por un tiempo hasta que expire el límite.

¿Alguien ha hecho esto antes o tiene algún consejo / sugerencia para ayudarme? Algo que es fácil ingresar y salir de mi aplicación es preferible. ¡Gracias!


Puede usar el objeto Collate en su página web.

function Collate(timeout) { this.timeout = timeout || 1000; } Collate.prototype = { time: 0, idle: function() { var t = new Date().getTime(); return (t - this.time > this.timeout && (this.time = t)); }, prefer: function(func) { this.func = func; clearTimeout(this.timer); this.timer = setTimeout(func, this.timeout); } };

Si desea que una función se ejecute una vez y no se ejecute de nuevo en el siguiente 1 segundo. Por ejemplo, si quiere evitar que el usuario envíe un formulario muchas veces, haga esto:

var timer = new Collate(3000); //3 seconds button1.onclick = function() { if(timer.idle()) { button1.form.submit(); } else alert("Don''t click too quickly!"); } //or on the form tag <script>var submitTimer = new Collate(3000);</script> <form action="post" onsubmit="return submitTimer.idle();">

Si esperas que un evento se dispare varias veces y solo quieras reaccionar a la última vez que se dispara. Como si desea buscar después de que un usuario haya terminado de escribir, haga esto:

var timer = new Collate(700); //0.7 seconds textfield1.onkeyup = function() { timer.prefer(function() { autocomplete.search(textfield1.value); }); };