Rate limiting to prevent malicious behavior in ExpressJS

前端 未结 1 1582
夕颜
夕颜 2021-01-12 07:13

Someone made me aware of some flaws in an application I\'m working on (mostly within my JavaScript on the front-end), that leaves open the possibility of, say, clicking a to

相关标签:
1条回答
  • 2021-01-12 07:23

    You could use the Collate object in your webpage.

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

    If you want a function to run once and not run again within the next 1 second. Like if you want to prevent the user from submitting a form many times, you do this:

    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();">
    

    If you expect an event to fire multiple times and only want to react to the last time it fires. Like if you want to search after a user has finished typing, you do this:

    var timer = new Collate(700); //0.7 seconds
    textfield1.onkeyup = function() {
        timer.prefer(function() {
            autocomplete.search(textfield1.value);
        });
    };
    
    0 讨论(0)
提交回复
热议问题