elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] como hago para restringir 10 minutos una pagina?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] como hago para restringir 10 minutos una pagina?  (Leído 1,983 veces)
venadHD

Desconectado Desconectado

Mensajes: 94

Donde hay hackers, tambien hay crackers.


Ver Perfil WWW
[Resuelto] como hago para restringir 10 minutos una pagina?
« en: 20 Julio 2015, 19:39 pm »

La cuestion es, realicé un sistema simple para que al tener X intentos de login, le bloquee el acceso, o asi lo tenia pensado, la cosa es...

Como puedo restringir ese acceso por ejemplo.. 5 minutos?, y que luego en la pagina ponga "Te quedan X minutos de restriccion" ?

El codigo que hice hasta ahora sobre esto es el siguiente:

Código
  1. <?php
  2. function Redirect($url, $permanent = false) {
  3. header('Location: ' . $url, true, $permanent ? 301 : 302);
  4. exit();
  5. }
  6. ?>
  7. <html>
  8. <head>
  9. <title>VeNaD PHP Testing</title>
  10. <style> * {margin-left:1%;font-family:Verdana, Geneva, sans-serif} </style>
  11. </head>
  12. <?php
  13. if (!isset($_SESSION['tryes'])) {
  14. $_SESSION['tryes'] = 0;
  15. }
  16. if (isset($_GET['login']) && isset($_POST['u']) && isset($_POST['p'])) {
  17. $_POST['u'] = htmlspecialchars($_POST['u']);
  18. $_POST['p'] = htmlspecialchars($_POST['p']);
  19. if (strlen($_POST['u']) > 5) {
  20. if (strlen($_POST['p']) > 5) {
  21. $_SESSION['ejemplo'] = array();
  22. $_SESSION['ejemplo']['u'] = $_POST['u'];
  23. $_SESSION['ejemplo']['p'] = $_POST['p'];
  24. $_SESSION['tryes'] = 0;
  25. Redirect("https://www.venad.cf/host/index.php");
  26. } else {
  27. echo("Tu contraseña debe contener 6 o mas caracteres");
  28. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  29. }
  30. } else {
  31. echo("Tu usuario debe contener 6 o mas caracteres");
  32. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  33. }
  34. } elseif (isset($_GET['login']) && !isset($_POST['u']) && !isset($_POST['p'])) {
  35. echo("Error al loggearte, prueba de nuevo<br>");
  36. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  37. }
  38. if (isset($_GET['logout']) && !isset($_GET['login']) && isset($_SESSION['ejemplo']['u']) && isset($_SESSION['ejemplo']['p'])) {
  39. Redirect("https://www.venad.cf/host/index.php");
  40. } elseif (isset($_GET['login']) or isset($_GET['logout'])) {
  41. Redirect("https://www.venad.cf/host/index.php");
  42. }
  43. ?>
  44. <body>
Código
  1. <?php
  2. if (!isset($_SESSION['tn6loggeado'])) {
  3. echo("<form action=\"index.php?login\" method=\"POST\">
  4. Usuario:<br>
  5. <input type=\"text\" name=\"u\">
  6. <br>
  7. Contraseña:<br>
  8. <input type=\"password\" name=\"p\">
  9. <br><br>
  10. <input type=\"submit\" value=\"Login\">
  11. </form>");
  12. if (isset($_SESSION['tryes']) && $_SESSION['tryes'] > 0) {
  13. echo ("<br> Comprueba tus datos de acceso, intento numero {$_SESSION['tryes']} / 3");
  14. }
  15. }
  16. elseif (isset($_SESSION['ejemplo'])) {
  17. echo("Tu usuario es este: {$_SESSION['tn6loggeado']['usuario']} <br><br>");
  18. echo("Tu contraseña es esta: {$_SESSION['tn6loggeado']['password']}<br><br>");
  19. echo("<a href=\"./index.php?logout\"><button>Cerrar sesion</button></a><br><br>");
  20. }
  21. ?>

Está separado porque uno es interno y otro funciona para mostrar al cliente la informacion


« Última modificación: 12 Septiembre 2015, 13:35 pm por #!drvy » En línea

joecarl

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: [Solucionado] como hago para restringir 10 minutos una pagina?
« Respuesta #1 en: 28 Julio 2015, 11:44 am »

Un par de cosillas:

No se debe usar la funcion header despues de haber enviado contenido web. La alternativa a eso es usar la funcion header para redirigir con unos segundos de retraso, y luego muestras el contenido web.

Para restringir el acceso puedes hacerlo de varias formas. La mas simple es que si se producen 10 intentos de acceso erroneos se guarden en una base de datos la IP del cliente y la hora en la que se hizo el ultimo login, esa tabla la llamaremos "lista negra".

Cada vez que se intente hacer login buscamos la IP del cliente en la lista negra:
  Si no se encuentra => dejamos paso libre.
  Si se encuentra => obtenemos el valor de la ultima hora registrada y:
    Si difiere en menos de 600segundos (10 minutos) => mostramos pagina de bloqueo.
    Si no => dejamos paso libre.


En línea

venadHD

Desconectado Desconectado

Mensajes: 94

Donde hay hackers, tambien hay crackers.


Ver Perfil WWW
Re: [Solucionado] como hago para restringir 10 minutos una pagina?
« Respuesta #2 en: 28 Julio 2015, 15:45 pm »

Un par de cosillas:

No se debe usar la funcion header despues de haber enviado contenido web. La alternativa a eso es usar la funcion header para redirigir con unos segundos de retraso, y luego muestras el contenido web.

Para restringir el acceso puedes hacerlo de varias formas. La mas simple es que si se producen 10 intentos de acceso erroneos se guarden en una base de datos la IP del cliente y la hora en la que se hizo el ultimo login, esa tabla la llamaremos "lista negra".

Cada vez que se intente hacer login buscamos la IP del cliente en la lista negra:
  Si no se encuentra => dejamos paso libre.
  Si se encuentra => obtenemos el valor de la ultima hora registrada y:
    Si difiere en menos de 600segundos (10 minutos) => mostramos pagina de bloqueo.
    Si no => dejamos paso libre.

Hnm, y que pasa si lo dejo de esta manera?

Código
  1. <?php
  2. function Redirect($url, $permanent = false) {
  3. header('Location: ' . $url, true, $permanent ? 301 : 302);
  4. exit();
  5. }
  6. ?>
  7. <html>
  8. <head>
  9. <title>vDNet ||</title>
  10. <style> * {margin-left:1%;font-family:Verdana, Geneva, sans-serif} </style>
  11. </head>
  12. <body>
  13. <?php
  14. if (!isset($_SESSION['tryes'])) {
  15. $_SESSION['tryes'] = 0;
  16. }
  17. if (isset($_SESSION['lasttime'])) {
  18. if ($_SESSION['lasttime'] - (time() + 60) < 1) {
  19. Redirect("https://www.venad.cf/srv/host/index.php");
  20. }
  21. }
  22. if ($_SESSION['tryes'] >= 3 && isset($_SESSION['lasttime'])) {
  23. $minutos = floor(($_SESSION['lasttime'] - (time() + 60))/60);
  24. $sec = $_SESSION['lasttime'] - (time() + 60);
  25. while ($sec > 60) {
  26. $sec = $sec - 60;
  27. }
  28. if (($minutos + $sec) > 0) {
  29. if (isset($_GET['login']) or isset($_GET['logout'])) {
  30. Redirect("https://www.venad.cf/srv/host/index.php");
  31. die();
  32. }
  33. echo("Has hecho login erroneamente 3 veces seguidas, Debes esperar para poder iniciar sesion de nuevo<br><br>$minutos minutos y $sec segundos");
  34. die();
  35. } else {
  36. $_SESSION['tryes'] = 0;
  37. }
  38. }
  39. if (isset($_GET['login']) && isset($_POST['u']) && isset($_POST['p']) && !isset($_GET['u']) && !isset($_GET['p'])) {
  40. $checking = array($_POST['u'], $_POST['p']);
  41. $_POST['u'] = htmlspecialchars($_POST['u']);
  42. $_POST['p'] = htmlspecialchars($_POST['p']);
  43. if (strlen($_POST['u']) > 5) {
  44. if (strlen($_POST['p']) > 5) {
  45. if ($checking[0] === $_POST['u'] && $checking[1] === $_POST['p']) {
  46. $_SESSION['tn6loggeado'] = array();
  47. $_SESSION['tn6loggeado']['usuario'] = $_POST['u'];
  48. $_SESSION['tn6loggeado']['password'] = $_POST['p'];
  49. $_SESSION['tryes'] = 0;
  50. Redirect("https://www.venad.cf/srv/host/index.php");
  51. } else {
  52. $_SESSION['lasterror'] = "Estas intentando meter un codigo script? nanai";
  53. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  54. Redirect("https://www.venad.cf/srv/host/index.php");
  55. }
  56. } else {
  57. $_SESSION['lasterror'] = "Tu contraseña debe contener 6 o mas caracteres";
  58. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  59. Redirect("https://www.venad.cf/srv/host/index.php");
  60. }
  61. } else {
  62. $_SESSION['lasterror'] = "Tu usuario debe contener 6 o mas caracteres";
  63. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  64. Redirect("https://www.venad.cf/srv/host/index.php");
  65. }
  66. } elseif (isset($_GET['login']) && !isset($_POST['u']) && !isset($_POST['p'])) {
  67. $_SESSION['lasterror'] = "Error al loggearte, comprueba que estas loggeandote de forma correcta";
  68. $_SESSION['tryes'] = $_SESSION['tryes'] + 1;
  69. Redirect("https://www.venad.cf/srv/host/index.php");
  70. }
  71. if (isset($_GET['logout']) && !isset($_GET['login']) && isset($_SESSION['tn6loggeado']['usuario']) && isset($_SESSION['tn6loggeado']['password'])) {
  72. Redirect("https://www.venad.cf/srv/host/index.php");
  73. } elseif (isset($_GET['login']) or isset($_GET['logout'])) {
  74. Redirect("https://www.venad.cf/srv/host/index.php");
  75. }
  76. if (!isset($_SESSION['tn6loggeado'])) {
  77. echo("<form action=\"index.php?login\" method=\"POST\">
  78. Usuario:<br>
  79. <input type=\"text\" name=\"u\">
  80. <br>
  81. Contraseña:<br>
  82. <input type=\"password\" name=\"p\">
  83. <br><br>
  84. <input type=\"submit\" value=\"Login\"><button disabled>Registrarse!</button>
  85. </form>");
  86. if (isset($_SESSION['tryes']) && $_SESSION['tryes'] > 0) {
  87. $_SESSION['lasttime'] = time() + (60*5);
  88. echo ("Error: {$_SESSION['lasterror']}<br>");
  89. echo ("<br> Comprueba tus datos de acceso, intento numero {$_SESSION['tryes']} / 3");
  90. }
  91. }
  92. elseif (isset($_SESSION['tn6loggeado'])) {
  93. echo("Tu usuario es este: {$_SESSION['tn6loggeado']['usuario']} <br><br>");
  94. echo("Tu contraseña es esta: {$_SESSION['tn6loggeado']['password']}<br><br>");
  95. echo("<a href=\"./index.php?logout\"><button>Cerrar sesion</button></a><br><br>");
  96. }
  97. ?>
  98. </body>
  99. </html>
En línea

joecarl

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: [Solucionado] como hago para restringir 10 minutos una pagina?
« Respuesta #3 en: 28 Julio 2015, 18:22 pm »

De ese modo estas usando variables de sesión. Por tanto, para el intruso sería tan fácil como borrar las cookies, y ya tendría 10 intentos más. Mi método también tiene sus pegas, en la mayoría de las conexiones a internet se usan IP dinámicas por tanto con reiniciar el router también se dispondrían de 10 nuevos intentos. Pero reiniciar el router es mas pesado que borrar las cookies.
En línea

FoxCom

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: [Solucionado] como hago para restringir 10 minutos una pagina?
« Respuesta #4 en: 11 Septiembre 2015, 02:33 am »

Yo ademas añadiría un captcha para evitar bots

https://www.google.com/recaptcha/intro/index.html

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines