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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Ayuda con captcha
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con captcha  (Leído 5,075 veces)
DarkItachi


Desconectado Desconectado

Mensajes: 516


Itachi Uchiha


Ver Perfil
Ayuda con captcha
« en: 10 Abril 2011, 13:39 pm »

Hola, estoy haciendo un captcha para mi web y me ha surgido un problemilla.

Os planteo la situación, tengo los siguientes archivos:

register.php
captcha.php

El primero me muestra el captcha y mediante javascript y php en teoría tiene que decir si es correcto, el segundo me lo genera y me envía el código mediante $_SESSION['captcha'] ; naturalmente, el primero también lo lee desde $_SESSION['captcha'] .

Os preguntaréis, ¿cuál es el problema?

El problema esque $_SESSION['captcha'] me devuelve el código de captcha de la página anterior. Es decir:

- Voy a la página y se genera un captcha (E6DAS) y el código está vacio: ""
- Recargo la página y se genera otro captcha (PA9SF), pero el código es el de la página anterior (E6DAS)
- Recargo la página y se genera otro captcha (ASD4D), pero el código es el de la página anterior (PA9SF)

Antes de mostrar $_SESSION['captcha'] hago un session_start() , y creo que tendría que funcionar bien, pero no sé dónde meto la pata...

¿Alguna idea?

Saludos.


En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda con captcha
« Respuesta #1 en: 10 Abril 2011, 14:39 pm »

Lo mejor seria que muestres el source de registerr y creo que no esta de mas el captcha.php


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
DarkItachi


Desconectado Desconectado

Mensajes: 516


Itachi Uchiha


Ver Perfil
Re: Ayuda con captcha
« Respuesta #2 en: 10 Abril 2011, 15:11 pm »

Aquí estan :)

register.php

Código
  1. <script type="text/javascript" src="sha1.js"></script>
  2. <script type="text/javascript"> //Función para validar el formulario
  3. function verificar_correo(texto)
  4. {
  5.     var status = false;    
  6.     var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
  7.     if (texto.search(emailRegEx) != -1)
  8.     {
  9.  status = true;
  10.     }
  11.     return status;
  12. }
  13. function validar()
  14. {
  15.    var noerrors=1;
  16.    var charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
  17.    var usu1=document.registro.usuario.value;
  18. var pas1=document.registro.pass.value;
  19. var pas2=document.registro.pass2.value;
  20. var email=document.registro.correo.value;
  21. if (usu1.length>3)
  22. {
  23. for (i=0;i<usu1.length;i++)
  24. {
  25. if (charset.indexOf(usu1.charAt(i),0)==-1)
  26. {
  27. alert("The username only can contain alphanumeric characters [a-z,A-Z,0-9], dashes [-] and underscores [_].");
  28. noerrors=0;
  29. break;
  30. }
  31. }
  32. }
  33. else
  34. {
  35. alert("The username must be equal or longer than 4 characters.");
  36. }
  37. if (pas1!=pas2)
  38. {
  39. alert("The passwords doesn't match. Please, rewrite them.");
  40. noerrors=0;
  41. } else if (pas1.length<4 || pas2.length<4) { alert("Password must be equal or longer than 4 characters."); noerrors=0; }
  42. if (!(verificar_correo(email))) { alert("The email that you wrote is invalid."); noerrors=0; }
  43. var thecaptcha=<?php echo '"'.$_SESSION['captcha'].'"'; ?>; //aqui hay code php
  44. if (thecaptcha!=document.registro.captchacode.value)
  45. {
  46. alert(thecaptcha);
  47. alert("Please, write again the captcha, you don't writted it properly.");
  48. }
  49. document.registro.js.value=1;
  50. document.registro.pass=sha1(sha1(document.registro.pass.value));
  51. document.registro.pass2=sha1(sha1(document.registro.pass2.value));
  52. if (noerrors==1) { document.registro.submit(); }
  53. }
  54. </script>
  55. <img src="captcha.php">
  56.  

captcha.php
Código
  1. <?php
  2. $numcaracteres=8;
  3. $caracteres = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4. $codigo = '';
  5. $i = 0;
  6. while ($i < $numcaracteres)
  7. {
  8.    $codigo .= substr($caracteres, mt_rand(0, strlen($caracteres)-1), 1);
  9.    $i++;
  10. }
  11. $ancho = 300;
  12. $alto = 60;
  13. $imagen = ImageCreate($ancho, $alto);
  14. $color1 = ImageColorAllocate($imagen, 0, 0, 0); // negro
  15. $color2 = ImageColorAllocate($imagen, 124, 159, 191); // azul
  16. $color3 = ImageColorAllocate($imagen, 255, 0, 0); //rojo
  17. ImageFill($imagen, 0, 0, $color2);
  18. ImageString($imagen, 5, 150, 30, $codigo, $color1);
  19. imageline($imagen, 0, 5, $ancho, 5, $color1);
  20. imageline($imagen, $ancho/4, 0, $ancho/2, $alto, $color1);
  21. imageline($imagen, 0, 18, $ancho, 18, $color1);
  22. imageline($imagen, 46, 0, 86, $alto, $color1);
  23. header("Content-Type: image/png");
  24. ImagePng($imagen);
  25. $_SESSION["captcha"] = $codigo;
  26. ImageDestroy($imagen);
  27. ?>
En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda con captcha
« Respuesta #3 en: 10 Abril 2011, 15:49 pm »

Bueno, te explico lo que pasa.

1- Imprimes el valor de la Sesión captcha, como no existe la sesión captcha, no muestra nada pero mas abajo en
Código
  1. <img src="captcha.php">
Modificas el valor de la sesión captcha y le agregas el valor que contiene la captcha.

Eso haces en el primer momento de ejecución:

1-Muestra el valor de la Sesión captcha, luego muestra la imagen y luego modificas el valor de la sesión captcha con el valor de la captcha actual.
2-Muestra el valor de la Sesión captcha (Recordando que el valor de la captcha lo modificaste por el valor de la captcha actual), luego muestra la imagen y luego modificas el valor de la sesión captcha con el valor de la captcha actual.


Ejemplo de lo que haces:
Código
  1. <?php
  2.  
  3. echo $_SESSION['a'];//Muestro la Session a
  4.  
  5. $_SESSION['a'] = $_GET['x'];//Modifico la Session por otro valor
  6.  
  7. echo "<br>".$_SESSION['a']; //Muestro el nuevo valor de la Session a
  8.  
  9. ?>

Otro ejemplo:
Código
  1. <?php
  2.  
  3. $var = 'hola mundo';
  4.  
  5. echo $var;
  6.  
  7. $var = '<br>Adios mundo';
  8.  
  9. echo $var;
  10.  
  11. ?>
  12.  


Por lo tanto, siempre el primer valor que imprimo sera diferente al segundo.

Lo que tienes que hacer, es mostrar primero la captcha antes de mostrar el valor que contiene la captcha.

Saludos.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
DarkItachi


Desconectado Desconectado

Mensajes: 516


Itachi Uchiha


Ver Perfil
Re: Ayuda con captcha
« Respuesta #4 en: 10 Abril 2011, 15:57 pm »

¿Y cómo puedo conseguir eso?, no consigo ver la manera de cambiarlo  :-\

Saludos :)

PD: Así el código lo he puesto esquemático, pero en la web real hay muchos tags HTML y texto de por medio antes de poner la imagen del captcha, y naturalmente lo mismo después de este.
« Última modificación: 10 Abril 2011, 16:00 pm por DarkItachi » En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda con captcha
« Respuesta #5 en: 10 Abril 2011, 16:16 pm »

Ps ya sabes porque causa que se muestra el valor de la capcha anterior, nose como podría decirte como lo pudieras cambiar ya que no veo el source completo. Y si es muy largo no creo que alguien intente entender el source...

  • Lo mejor seria que trates de resolver el problema, sabes la causa y solo queda pensarlo ya que el problema es lógico.
  • Otra opción, seria que nos muestre el algoritmo completo que usas pero seria muy tedioso escribirlo xD y siempre esta la opción que se te olvide algo.

Lo mejor es que lo trates de resolver y te serviría de experiencia.

Saludos.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
DarkItachi


Desconectado Desconectado

Mensajes: 516


Itachi Uchiha


Ver Perfil
Re: Ayuda con captcha
« Respuesta #6 en: 10 Abril 2011, 16:23 pm »

Código
  1. <html>
  2. <script type="text/javascript" src="sha1.js"></script>
  3. <script type="text/javascript"> //Función para validar el formulario
  4. function verificar_correo(texto)
  5. {
  6.     var status = false;    
  7.     var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
  8.     if (texto.search(emailRegEx) != -1)
  9.     {
  10.  status = true;
  11.     }
  12.     return status;
  13. }
  14. function validar()
  15. {
  16.    var noerrors=1;
  17.    var charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
  18.    var usu1=document.registro.usuario.value;
  19. var pas1=document.registro.pass.value;
  20. var pas2=document.registro.pass2.value;
  21. var email=document.registro.correo.value;
  22. if (usu1.length>3)
  23. {
  24. for (i=0;i<usu1.length;i++)
  25. {
  26. if (charset.indexOf(usu1.charAt(i),0)==-1)
  27. {
  28. alert("The username only can contain alphanumeric characters [a-z,A-Z,0-9], dashes [-] and underscores [_].");
  29. noerrors=0;
  30. break;
  31. }
  32. }
  33. }
  34. else
  35. {
  36. alert("The username must be equal or longer than 4 characters.");
  37. }
  38. if (pas1!=pas2)
  39. {
  40. alert("The passwords doesn't match. Please, rewrite them.");
  41. noerrors=0;
  42. } else if (pas1.length<4 || pas2.length<4) { alert("Password must be equal or longer than 4 characters."); noerrors=0; }
  43. if (!(verificar_correo(email))) { alert("The email that you wrote is invalid."); noerrors=0; }
  44. var thecaptcha=<?php echo '"'.$_SESSION['captcha'].'"'; ?>;
  45. if (thecaptcha!=document.registro.captchacode.value)
  46. {
  47. alert(thecaptcha);
  48. alert("Please, write again the captcha, you don't writted it properly.");
  49. }
  50. document.registro.js.value=1;
  51. document.registro.pass=sha1(sha1(document.registro.pass.value));
  52. document.registro.pass2=sha1(sha1(document.registro.pass2.value));
  53. if (noerrors==1) { document.registro.submit(); }
  54. //activacion del correo
  55. }
  56. </script>
  57. <head>
  58. <link rel="shortcut icon" href="/images/favicon.ico" />
  59. <style type="text/css">
  60. body {
  61. font-family: "Agency FB";
  62. font-style: bold;
  63. color: black;
  64. background-color: #7c9fbf;
  65. }
  66. .cuadro {
  67. background-color: #FFFFFF;
  68. border: #666666;
  69. border-style: solid;
  70. border-top-width: 5px;
  71. border-right-width: 5px;
  72. border-bottom-width: 5px;
  73. border-left-width: 5px;
  74. border-color: #8ec1da;
  75. -moz-border-radius: 15px;
  76. margin:10px 10px 10px 10px;
  77. }
  78. </style>
  79. <title>Fast Click URL</title>
  80. </head>
  81. <body>
  82. <br> <br>
  83. <center> <img src="/images/logo3.png"</center>
  84. <br> <br>
  85. <table width="600" class="cuadro" align="center" style="font-size:40px;text-align:center"> <form name="registro" method="post" action="check.php">
  86. <input type="hidden" name="js" value="0">
  87. <tr> <td>
  88. Username: <br><input type="text" name="usuario" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri">
  89. </td> </tr>
  90. <tr> <td>
  91. Password: <br><input type="password" name="pass" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri">
  92. </td> </tr>
  93. <tr> <td>
  94. Repeat Password: <br> <input type="password" name="pass2" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri">
  95. </td> </tr>
  96. <tr> <td>
  97. E-mail: <br> <input type="text" name="correo" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri">
  98. </td> </tr>
  99. <tr> <td>
  100. Captcha code: <br> <input type="text" name="captchacode" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri">
  101. </td> </tr>
  102. <tr> <td> <img src="captcha.php"> </tr> </td>
  103. EL CAPTCHA LLEGA ATRASADO, SIEMPRE LLEGA EL ANTERIOR
  104. <tr> <td>
  105. <script type="text/javascript">
  106. document.write('</tr> </td><tr> <td> <center> <input type="button" width="80" onclick="validar()" value="   Register   " style="text-align:center;font-size:30px;font-weight:bold;border-color:#2f57a9;background-color:#d9d9d9" class="cuadro"> </center> </tr></td> </tr>');
  107. </script>
  108. <noscript>
  109. <td> <tr>
  110. <center> <input type="submit" width="80"  value="   Register   " style="text-align:center;font-size:30px;font-weight:bold;border-color:#2f57a9;background-color:#d9d9d9" class="cuadro"> </center>
  111. </tr> <td>
  112. </noscript>
  113. </form> </table>
  114. <table width="100" class="cuadro" align="center" style="font-size:30px;text-align:center;margin-top:10px"> <tr>
  115. <td> <a href="index.php"><img src="/images/arrow.png"></a>
  116. </td> </tr> </table>
  117. </head>
  118. </body>

He probado a resolverlo por mi mismo pero no lo consigo, el código que postee era todo el código JS y PHP. Ahora añado el HTML para que veas que no se como arreglarlo, a ver si se te ocurre algo.

Saludos
En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda con captcha
« Respuesta #7 en: 10 Abril 2011, 16:27 pm »

No creo que vaya a leer todo el código xD, te toca pensarlo man.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
DarkItachi


Desconectado Desconectado

Mensajes: 516


Itachi Uchiha


Ver Perfil
Re: Ayuda con captcha
« Respuesta #8 en: 10 Abril 2011, 17:55 pm »

Porfavor, necesito ayuda, ¡no hay manera de conseguirlo!

Saludos :(
En línea

Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.
.mokk.

Desconectado Desconectado

Mensajes: 177



Ver Perfil
Re: Ayuda con captcha
« Respuesta #9 en: 11 Abril 2011, 19:41 pm »

Ya vi tu codigo y a como lo veo esque luego de dar click llamas la funcion y ahi todo bien pero al mismo tiempo recarga la web y ahi ya cambia de nuevo el valor.

Bueno aqui te dejo mi codigo que tengo en mi web, puede que encuentres codigo demas, pero ahi puedes checar que luego de dar click al boton, el form no recarga, es lo primero que hace el code que si se le dio click haga el codigo sino muestra el form

Código
  1. <?php
  2. if(isset($_POST['reset']))
  3. {
  4. $user = clean($_POST['user']);
  5. $tmp = clean($_POST['captch']);
  6. if(empty($user) || empty($tmp))
  7. {
  8. alertbox("No dejes espacios vacios","index.php?do=reset");
  9. }
  10. if($tmp != $_SESSION['tmptxt'])
  11. {
  12. alertbox("El codigo es incorrecto","index.php?do=reset");
  13. }
  14. $q = mssql_query("SELECT * FROM Account WHERE UserID='".$user."'");
  15. if(!mssql_num_rows($q))
  16. {
  17. alertbox("El UserID No Existe","index.php?do=reset");
  18. }else{
  19. if($r->Code != 0 || $r->Code != ""){
  20. alertbox("Ya Hay Un Codigo, Disponible en tu cuenta, revisa tu correo, Checa que podria estar en la zona Spam","index.php");
  21. }
  22. }
  23.  
  24. do{
  25. $code = random1(40);
  26. $q = mssql_query("SELECT * FROM Login Where Code='".$code."'");
  27. {
  28. $y = 1;
  29. }else{
  30. $y = 0;
  31. }
  32. }while($y == 1);
  33. mssql_query("UPDATE Login SET CodeFecha=GETDATE(), Code='".$code."' WHERE AID='".$r->AID."'");
  34. $texto = "Se te ha enviado un correo con la direccion donde podras cambiar tu contraseña, <br> Este Link Solo es valido 1 vez
  35. http://".getUrl()."/index.php?do=reset2&code=".$code."&aid=".$r->AID."<br>El codigo es valido por 15 dias";
  36. enviarmail($r->Email,"Reset Contraseña",$texto);
  37. alertbox("Se te ha enviado un correo con las instrucciones para cambiar tu contraseña, El codigo es valido por 15 dias","index.php");
  38. }else{
  39. ?>
  40. <form name="resetz" method="post">
  41. <center><font color="#00FF00">
  42. Ingresa el UserID: <br>
  43. <input type="text" name="user"><br>
  44. Codigo de Verificacion:<br><br>
  45. <img src="./modulos/captcha.php" width="100" height="30" vspace="3"><br>
  46. <input type="text" name="captch"><br><br>
  47. <input type="submit" name="reset" value="Reset Contraseña">
  48. </font></center>
  49. </form>
  50. <? } ?>[/php]
  51.  
  52. captcha.php
  53. [code=php]
  54. <?php
  55. function randomText($length) {
  56.    $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
  57.    for($i=0;$i<$length;$i++) {
  58.      $key .= $pattern{rand(0,35)};
  59.    }
  60.    return $key;
  61. }
  62.  
  63. $_SESSION['tmptxt'] = randomText(8);
  64. $captcha = imagecreatefromgif("bgcaptcha.gif");
  65. $colText = imagecolorallocate($captcha, 0, 0, 0);
  66. imagestring($captcha, 5, 16, 7, $_SESSION['tmptxt'], $colText);
  67.  
  68. header("Content-type: image/gif");
  69. imagegif($captcha);
  70. ?>

Espero te ayude si aun asi no puedes ahi te hecho una mano n_n[/code]
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA]Script captcha
PHP
Adramelech 5 3,221 Último mensaje 4 Septiembre 2008, 05:44 am
por Karman
[Ayuda] Bot que Leea Captcha
Programación Visual Basic
agus0 9 13,486 Último mensaje 16 Noviembre 2009, 07:42 am
por kagure
VB.NET - Captcha a PictureBox - Ayuda porfavor
Scripting
ivanhack 0 3,502 Último mensaje 12 Diciembre 2011, 17:36 pm
por ivanhack
VB.NET - Captcha a PictureBox - Ayuda porfavor
.NET (C#, VB.NET, ASP)
ivanhack 4 4,913 Último mensaje 26 Diciembre 2011, 00:44 am
por ivanhack
ayuda para superar un captcha??
Dudas Generales
dea_65 6 3,032 Último mensaje 26 Febrero 2019, 19:15 pm
por Machacador
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines