Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Puntoinfinito en 26 Marzo 2013, 21:50 pm



Título: Error en sistema de seguridad
Publicado por: Puntoinfinito en 26 Marzo 2013, 21:50 pm
Hey  ::)

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
  1. <?
  2.  
  3. //...
  4.  
  5.  
  6. $SESSION['nuller'] = 0;
  7. if (!$SESSION['total']) {
  8. $SESSION['total'] = 1; }
  9.  
  10.  
  11. if ($SESSION['total'] <= 5) {
  12. $SESSION['nuller'] = 0;
  13. $SESSION['total'] = $SESSION['total'] + 1;
  14. }
  15. else {
  16. if ($SESSION['nuller'] == 0) {
  17. $SESSION['nuller'] = 1;
  18. $SESSION['tiempo'] = time() + (3 * 60);
  19. cuntinue;
  20. }
  21. if ($SESSION['tiempo'] >= time()) {
  22. $SESSION['total'] = 0;
  23. $sec = "0";
  24. $page = $_SERVER['PHP_SELF'];
  25. header("Refresh: $sec; url=$page");
  26. exit();
  27. }
  28. echo "<form method='post' action='captcha/validar.php'>".recaptcha_get_html($publickey, $error)."<br /><input type='submit' /></form>";
  29. exit();
  30. }
  31.  
  32. //...
  33.  
  34.  

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!!


Título: Re: Error en sistema de seguridad
Publicado por: s7evin en 27 Marzo 2013, 10:26 am
Buenos días!

Esto es para cualquier tipo de petición sobre tu servicio web?
O solo se aplica sobre un formulario?
Porque si es sobre cualquier petición lo veo un poco extraño jeje, pero tu sabrás el motivo por el cual lo haces, en eso ya no entro... :P

No sé si estas guardando las variables de sesión sobre ese array ($SESSION) previamente, sino es así la super-global de sesión es "$_SESSION" y no "$SESSION" (corregidme si me estoy equivocando... quizá en alguna versión anterior tenia esa otra referencia), por tanto deberías estar 'seteando' y recogiendo los valores sobre el array $_SESSION.

Código:
<?php
session_start();
 
$_SESSION['nuller'] = 0;
if (!$_SESSION['total']) {
$_SESSION['total'] = 1;
}

//....

?>

Espero haber sido de ayuda.
Saludos!


Título: Re: Error en sistema de seguridad
Publicado por: Puntoinfinito en 27 Marzo 2013, 11:54 am
Es para un formulario :P

Lo acabo de probar con lo de
Código:
 $_SESSION 
y nada, no sale el código captcha. :/