расширяя этот ответ Как ограничить количество пользовательских запросов за минуту… Я разработал этот скрипт. Он отвечает true или false, в зависимости от того, вызывал ли скрипт в течение 15 минут (в моем случае простой скрипт загрузки PHP, который включает в себя приведенный ниже скрипт) более 10 раз.
Это действительно работает, но я хотел бы знать, действительно ли это полезно для предотвращения атак, таких как DDOS или что-то подобное. Другими словами, добавляет ли это уровень безопасности к общедоступному сценарию PHP? Кто-нибудь знает, как я могу улучшить это? Дело в том, что скрипт, вызываемый для загрузки изображений, должен быть публичным в моем случае.
Я надеюсь, что этот скрипт может быть полезным для кого-то.
<?
function isAllowed() {
$ip = $_SERVER['HTTP_CLIENT_IP']?$_SERVER['HTTP_CLIENT_IP']:($_SERVER['HTTP_X_FORWARDED_FOR']?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR']);
if (file_exists($ip.".txt")) {
$myfile = fopen($ip.".txt", "a");
$txt = date("Y-m-d H:i:s");
fwrite($myfile, $txt . "\n");
$subject = file_get_contents($ip.".txt");
$separator = "\n";
$line = strtok($subject, $separator);
$count = 0;
while ($line !== false) {
$line = strtok( $separator );
$currentTime = date('Y-m-d H:i:s');
$before15mins = strtotime('-15 minutes');
$before15minsAsDate = date('Y-m-d H:i:s', $before15mins);
$time = strtotime( $line );
$myDate = date( 'Y-m-d H:i:s', $time );
if ($before15minsAsDate > $myDate) {
}
else {
$count++;
}
}
if($count > 10) {
//echo("too many attempts: " . $count);
return false;
}
else {
//echo("counting: " . $count);
return true;
}
} else {
fopen($ip.".txt","w");
return true;
}
}
?>
Задача ещё не решена.
Других решений пока нет …