2 php jquery captcha abuse web-traffic
我注意到有些用户通过下载多个文件(例如同时500个文件)来重载我的网站并在较短的时间内打开更多页面,我想显示验证码,如果用户检测到意外导航.
我知道如何实现Captcha,但我无法弄清楚使用(PHP)检测流量滥用的最佳方法是什么?
一种常见的方法是使用像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)