Estoy intentando crear un "sistema de seguridad" para que no me floodeen mi página web cosa que ya me pasó anteriormente. La aplicación permite subir archivos entonces decidí hacer algún sistema que cada X peticiones te saliera un captcha para cuntinuar y hasta que no pasara X tiempo, no volviera a la normalidad.
Código
<? //... $SESSION['nuller'] = 0; if (!$SESSION['total']) { $SESSION['total'] = 1; } if ($SESSION['total'] <= 5) { $SESSION['nuller'] = 0; $SESSION['total'] = $SESSION['total'] + 1; } else { if ($SESSION['nuller'] == 0) { $SESSION['nuller'] = 1; cuntinue; } $SESSION['total'] = 0; $sec = "0"; $page = $_SERVER['PHP_SELF']; } echo "<form method='post' action='captcha/validar.php'>".recaptcha_get_html($publickey, $error)."<br /><input type='submit' /></form>"; } //...
Explico: Esto lo que hace es ;
Código:
$SESSION['nuller'] = 0;
if (!$SESSION['total']) {
$SESSION['total'] = 1; }
Crea una sesión que se llama total que será el total de peticiones que hace. Esta misma cuando llegue a ser superior a 5 le pedirá un captcha. Por otro lado también declaramos una sesión llamada nuller que lo único que hará será crear o no crear una fecha para que vuelva a la normalidad.
Código:
if ($SESSION['total'] <= 5) {
$SESSION['nuller'] = 0;
$SESSION['total'] = $SESSION['total'] + 1;
}
else {
if ($SESSION['nuller'] == 0) {
$SESSION['nuller'] = 1;
$SESSION['tiempo'] = time() + (3 * 60);
cuntinue;
}
Aquí como he dicho, vemos que va sumando peticiones y cuando llega a 6 se crea una variable tiempo para controlar hasta que tiempo ha de estar pidiendo captcha. En este caso hasta 3 min después. Se ve como dice que nuller ha de ser de valor 1 para que cuando vuelva a entrar no se le haga otra vez la variable tiempo y su tiempo sea otro. Para que se mantenga vamos.
Código:
if ($SESSION['tiempo'] >= time()) {
$SESSION['total'] = 0;
$sec = "0";
$page = $_SERVER['PHP_SELF'];
header("Refresh: $sec; url=$page");
exit();
}
echo "<form method='post' action='captcha/validar.php'>".recaptcha_get_html($publickey, $error)."<br /><input type='submit' /></form>";
exit();
}
Finalmente aquí vemos como en caso de que el tiempo ya haya pasado, el total de peticiones vuelva a ser 0 y que se haga un reload para hacer lo que quieria el usuario con normalidad. En caso de que no sea el tiempo, se va a pedir el código captcha.
Espero que se entienda más o menos... Necesito ayuda porque las peticiones que se pueden hacer son infinitas, es decir no pide el código captcha.
Saludos!!