检测到意外导航时显示验证码以防止滥用流量

2 php jquery captcha abuse web-traffic

我注意到有些用户通过下载多个文件(例如同时500个文件)来重载我的网站并在较短的时间内打开更多页面,我想显示验证码,如果用户检测到意外导航.

我知道如何实现Captcha,但我无法弄清楚使用(PHP)检测流量滥用的最佳方法是什么?

aki*_*irk 5

一种常见的方法是使用像memcached这样的东西来存储请求,我已经开源了一个实现这个目的的小类:php-ratelimiter

如果您有兴趣更详细地解释为什么需要在一分钟内存储请求,请查看此帖子.

总而言之,您的代码可能最终看起来像这样:

if (!verifyCaptcha()) {
    $rateLimiter = new RateLimiter(new Memcache(), $_SERVER["REMOTE_ADDR"]);
    try {
        $rateLimiter->limitRequestsInMinutes(100, 5);
    } catch (RateExceededException $e) {
        displayCaptcha();
        exit;
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上,代码基于每分钟,但您可以很容易地将其调整为每30秒一次:

private function getKeys($halfminutes) {
    $keys = array();
    $now = time();
    for ($time = $now - $halfminutes * 30; $time <= $now; $time += 30) {
        $keys[] = $this->prefix . date("dHis", $time);
    }
    return $keys;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个看起来不错的简单课程.感谢分享! (2认同)