Autor Tema: Real Captcha  (Leído 1799 veces)

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Real Captcha
« en: 04 de Agosto de 2008, 21:43:00 pm »
Acabo de desarollar un script PHP que es muy fuerte contra los bots  ;D
Consiste en lo siguiente:
Tienes que decir cual es la accion que hace la persona de la imagen. Cada imagen tiene en la base de datos una definicion determinada de la accion. Aqui un ejemplo:

Aqui el codigo:  xD
SQL:
Código: [Seleccionar]
--
-- Estructura de tabla para la tabla `capcha`
--

CREATE TABLE IF NOT EXISTS `capcha` (
  `id` int(11) NOT NULL auto_increment,
  `answer` varchar(250) NOT NULL,
  `img` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Volcar la base de datos para la tabla `capcha`
--

INSERT INTO `capcha` (`id`, `answer`, `img`) VALUES
(1, 'Eating', '7.jpg'),
(2, 'Playing fotball', '8.jpg'),
(3, 'Talking on the phone', '11.jpg');
capcha.php
<?
session_start
();
include(
"capcha_mysql.php");

$query mysql_query("SELECT * FROM capcha ORDER BY rand() LIMIT 5");
$sql mysql_fetch_array($query);
$_SESSION[&#39;answer&#39;] = $sql[&#39;answer&#39;];

header("Content-type: image/jpeg");
$im = @imagecreatefromjpeg("images/$sql[img]");
imagejpeg($im);
imagedestroy($im);
?>

form.php
<?
include("capcha_mysql.php");
$query mysql_query("SELECT * FROM capcha ORDER BY rand() LIMIT 5");

$an = array();
$rand rand(15);
$na $rand;
$n 0;
session_start();
$an[$rand] = $_SESSION[&#39;answer&#39;];

while($i=mysql_fetch_array($query)) {
$n $n 1;
if(
$n != "$na&& $i[answer] != "".$_SESSION[&#39;answer&#39;]."") {
$an[$n] = $i[answer];
}
}
?>
<img src="capcha.php" style="border: 3px solid #666699"><p>
<font size="6" color="#666699">Que acción realizan las personas de la imagen??</font></p>
<form method="POST" action="send">
<?
for($i=1;$i<=5;$i++) {
if (
$an[$i] != NULL) {
echo 
"<p>$an[$i] <input type=\"radio\" value=\"$an[$i]\" name=\"answer\"></p>";
}
}
?>

<p><input type="submit" value="Enviar"></p>
</form>

send.php

<?
if (
$_POST[&#39;answer&#39;]) {
if ($_POST[&#39;answer&#39;] == "".$_SESSION[&#39;answer&#39;]."") {
echo "Respuesta correcta";
} else {
echo 
"Respuesta incorrecta";
}
}
?>

capcha_mysql.php
<?
$host 
= &#39;localhost&#39;;
$user = &#39;root&#39;;
$pass = &#39;password&#39;;
$db = &#39;capcha&#39;;
$connect = @mysql_connect($host$user$pass) or die (&#39;Real-Capcha cant make the connection whit mysql.&#39;);
mysql_select_db($db$connect) or die (&#39;DB dont exist&#39;);
?>

Lo dejo como codigo libre, podeis hacer mejoras si quereis!  :)
« Última modificación: 15 de Agosto de 2008, 23:45:11 pm por naveda »


Este usuario ya no lo uso, mi nuevo usuario es marco811

Comunidad PHPeros

Real Captcha
« en: 04 de Agosto de 2008, 21:43:00 pm »

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Real Capcha
« Respuesta #1 en: 05 de Agosto de 2008, 14:02:06 pm »
Por favor, leete las Normas


Desconectado Deviljoker

  • PHPer@
  • **
  • Mensajes: 67
  • Karma: 0
    • Ver Perfil
Re: Real Capcha
« Respuesta #2 en: 05 de Agosto de 2008, 15:12:01 pm »
Pon fuente pillin ;)

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re: Real Capcha
« Respuesta #3 en: 05 de Agosto de 2008, 16:49:45 pm »
tambien lo publique en forosdelweb  ^-^ ^-^


Este usuario ya no lo uso, mi nuevo usuario es marco811

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Real Capcha
« Respuesta #4 en: 05 de Agosto de 2008, 19:54:24 pm »
Entonces no hay problema, puedes estar contento con tu codigo porque es bastante interesante ;)
Por favor, leete las Normas


Desconectado Adidi

  • PHPer@ Fijo
  • ***
  • Mensajes: 123
  • Karma: 0
    • Ver Perfil
Re: Real Capcha
« Respuesta #5 en: 06 de Agosto de 2008, 11:29:33 am »
no se no se no se ........

Quizas si es el el de forosdelweb, pero no se no se y no se xd

-------------------

Ahora mismo probaré el codigo. Parece estar todo bien y espero que me funcione bastante bien


un saludo
adrián

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re: Real Capcha
« Respuesta #6 en: 06 de Agosto de 2008, 13:20:11 pm »
pruebalo porfa!  ;) Si quieres puedes añadir mas imagenes en la base de datos  ;D


Este usuario ya no lo uso, mi nuevo usuario es marco811

Desconectado Tope

  • PHPero Experto
  • *****
  • Mensajes: 540
  • Karma: 23
  • Sexo: Masculino
  • Programador PHP
    • Ver Perfil
    • www.Info-Keko.Es
Re: Real Capcha
« Respuesta #7 en: 06 de Agosto de 2008, 23:51:30 pm »
hombre siendo de kekoman, yo no sé si lo ha hecho el porque a que viene a cuento lo de medio  codigo en ingles xDD pero bueno el usuario de forosdelweb si es suyo..
ah y por cierto

NO es seguro este captcha

¿Por qué?
Sencillamente porque aunque existan 3 respuestas el bot podría acertar a la primera o a la 2ª o a la 3ª y una vez explore la pagina o mejor dicho el programador mismo vea cuantas imagenes hay, el bot puede aprender la respuesta de cada imagen primero seria probable que no acierte pero una vez las vaya acertando y las memorize...
Un Saludo, Tope >> Programador FIJO en PHPeros

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re: Real Capcha
« Respuesta #8 en: 07 de Agosto de 2008, 11:03:51 am »
este script es solo una idea, se puede mejorar mucisimo el codigo y ademas se pueden añadir mas imagenes en la base de datos  xD


Este usuario ya no lo uso, mi nuevo usuario es marco811

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Real Capcha
« Respuesta #9 en: 15 de Agosto de 2008, 01:18:32 am »
Hola,

Bueno, lo primero kekoman, es que se dice Captcha y no Capcha, te recomiendo cambiar el titulo sobre todo por las busquedas desde google, generará mas visitas estando el titulo correctamente escrito.

Aunque tengo que decirte, que tiene algunos problemas pero tambien tengo soluciones que ofrecerte.

Uno de los problemas es lo que dice Tope, que si un bot sabe la respuesta de cada una de las imagenes pues ya tiene resuelto el captcha simplemente asociando el nombre de la imagen con la respuesta correcta.
Ejemplo:
   Si muestra la imagen 2.jpg puede saber que la respuesta es la 1
   Si muestra la imagen 17.jpg puede saber que la respuesta es la 3

La posible solucion a esto seria guardar el contenido de la imagen directamente en la base de datos tal y como hace naveda en esta direccion: http://www.phperos.net/foro/index.php/topic,1853.0.html
Ya que al guardarlo en una direccion no tiene nombre de imagen y por lo tanto no puede comparar.

Pero aún asi tenemos otro problema y es que, un bot puede guardar una imagen y almacenar el contenido escrito en una variable (lo que seria equivalente a abrir una imagen poniendole extension .txt)
Asi que si tiene todas las imagenes guardadas de esta forma, solo bastaria con guardar la que esta visualizando ahora mismo, y ver con cual coincide, y cuando coincida buscar la respuesta.

Esto se arregla facilmente añadiendole algun texto aleatorio a la imagen que muestras con la libreria GD2 por toda la imagen, con algun tipo de transparencia.

Si haces lo que te digo seguramente conseguiras que tu captcha sea muy seguro.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re: Real Capcha
« Respuesta #10 en: 15 de Agosto de 2008, 13:46:26 pm »
Vamos a ver, cuando la libreria gd2 muestra una imagen, no muestra la direccion de la imagen  ^-^ ^-^


Este usuario ya no lo uso, mi nuevo usuario es marco811

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Real Capcha
« Respuesta #11 en: 15 de Agosto de 2008, 15:58:15 pm »
Disculpame, no habia leido el codigo completamente y no me habia fijado que ya usabas la libreria gd2.

Aun asi, el otro consejo te sera de mucha ayuda.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Tope

  • PHPero Experto
  • *****
  • Mensajes: 540
  • Karma: 23
  • Sexo: Masculino
  • Programador PHP
    • Ver Perfil
    • www.Info-Keko.Es
Re: Real Capcha
« Respuesta #12 en: 15 de Agosto de 2008, 22:40:36 pm »
De todos modos, podrias poner algo sobre la imagen que cambie cada vez para que la imagen no sea identica (aunque sea la misma foto..)

un ejemplo seria poner lineas aleatorias y en este caso cada una es de otro color aleatorio.

$info
getimagesize("images/".$sql[&#39;img&#39;]);
for($i 0$i 10$i++){
	
$inicio mt_rand(0$info[0]);
	
$fin mt_rand(0$info[0]);
	
imageline($im$inicio0$fin$info[1], imagecolorallocate($imrand(0255), rand(0255), rand(0255)));
}


(el código es de un captcha que hize para IK pero era solo de letras)
Un Saludo, Tope >> Programador FIJO en PHPeros

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Real Capcha
« Respuesta #13 en: 15 de Agosto de 2008, 23:03:20 pm »
De todos modos, podrias poner algo sobre la imagen que cambie cada vez para que la imagen no sea identica (aunque sea la misma foto..)
Pues eso mismo he dicho yo pero con textos aleatorios.
Aunque lo de las lineas quizas seria mas facil porque ahorraria mas codigo, pero no serian suficientes 10 lineas, abria que dibujar muchas mas, ya que se puede usar algunos algoritmos para parecidos entre imagenes y cadenas.
Por eso dije que seria mejor palabras, o una palabra muy grande, porque abarca mas puntos en la imagen.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Tope

  • PHPero Experto
  • *****
  • Mensajes: 540
  • Karma: 23
  • Sexo: Masculino
  • Programador PHP
    • Ver Perfil
    • www.Info-Keko.Es
Re: Real Captcha
« Respuesta #14 en: 16 de Agosto de 2008, 11:23:19 am »
Anda es verdad TLX, perdon, no habia leido el post entero :P

yo para un  captcha con logotipos formo 3 palabras (podrian ser aleatorias ya de paso) que cambian de color y de sitio
Un Saludo, Tope >> Programador FIJO en PHPeros