我有一个非常简单的游戏,用户点击一个通过ajax调用某些php函数的按钮。 php函数记录调用并减少用户单击按钮1的能力。
如果用户垃圾邮件点击按钮或强制调用php函数,那么用户可以在1分钟内运行php函数数百次。
有办法阻止这个吗?
简单的服务器端代码,每隔1500毫秒限制一次调用,或者结果不是:)
$user = Utils::getUser();
$now = round(microtime(true) * 1000);
// run spin
if($user){
$dif = $now - $user->last_spin;
if($user->spins > 0 && $dif > 1500){
$user->last_spin = $now;
$user->decrement('spins');
$user->increment('spin_count');
$user->save();
//do stuff
}
}
答案 0 :(得分:0)
对于每个请求,将microtime存储在会话中并在执行php代码之前检查该会话:
if(!isset($_SESSION)) session_start();
if(!isset($_SESSION['ajax_call']) || $_SERVER['REQUEST_TIME_FLOAT'] >($_SESSION['ajax_call']+1.5)){
//ok, your code to run
}
$_SESSION['ajax_call'] = $_SERVER['REQUEST_TIME_FLOAT'];