Foros del Web » Programando para Internet » PHP »

Que opinan? Imagen anti-bot

Estas en el tema de Que opinan? Imagen anti-bot en el foro de PHP en Foros del Web. Alguien encuentra alguna falla en este código? Es un anti-bot para formularios. Código PHP: <?php  session_start ();  Header ( "Content-type: image/png" );  $leter []= "A" ; ...
  #1 (permalink)  
Antiguo 20/12/2007, 18:00
Avatar de mapper  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Que opinan? Imagen anti-bot

Alguien encuentra alguna falla en este código?
Es un anti-bot para formularios.
Código PHP:
<?php 
session_start
(); 
Header("Content-type: image/png"); 
$leter[]="A";
$leter[]="B";
$leter[]="C";
$leter[]="D";
$leter[]="E";
$leter[]="F";
$leter[]="G";
$leter[]="H";
$leter[]="J";
$leter[]="K";
$leter[]="L";
$leter[]="M";
$leter[]="N";
$leter[]="P";
$leter[]="Q";
$leter[]="R";
$leter[]="S";
$leter[]="T";
$leter[]="U";
$leter[]="V";
$leter[]="W";
$leter[]="X";
$leter[]="Y";
$leter[]="Z";


$xleter=rand(0,23);
$numlet=rand(0,1);
if(
$numlet){
$t1=$leter[$xleter];
}else{
$t1=rand(2,9);
}


$xleter=rand(0,23);
$numlet=rand(0,1);
if(
$numlet){
$t2=$leter[$xleter];
}else{
$t2=rand(2,9);
}


$xleter=rand(0,23);
$numlet=rand(0,1);
if(
$numlet){
$t3=$leter[$xleter];
}else{
$t3=rand(2,9);
}


$xleter=rand(0,23);
$numlet=rand(0,1);
if(
$numlet){
$t4=$leter[$xleter];
}else{
$t4=rand(2,9);
}

if(empty(
$HTTP_SESSION_VARS['text'])){

$text=$t1."---".$t2."---".$t3."---".$t4;
$HTTP_SESSION_VARS[text]=$text;
}else{
/////////


$nueva=explode("---",$HTTP_SESSION_VARS[text]);
$t1=$nueva[0];
$t2=$nueva[1];
$t3=$nueva[2];
$t4=$nueva[3];
}
/////////
$image ImageCreate(15060);
$x=1;
$stw=1;
$sth=1;
$red ImageColorAllocate($image2550,0); 
$r=rand(1,6);

do{
if(
$r==1){$bluealp imagecolorallocatealpha $image$x,20 6050 );};
if(
$r==2){$bluealp imagecolorallocatealpha $image20$x6050 );};
if(
$r==3){$bluealp imagecolorallocatealpha $image2060$x50 );};
if(
$r==4){$bluealp imagecolorallocatealpha $image$x$x$x50 );};
if(
$r==5){$bluealp imagecolorallocatealpha $image$x60$x50 );};
if(
$r==6){$bluealp imagecolorallocatealpha $image20$x$x50 );};

imageellipse $image7530$stw$sth$bluealp);
$x++;
$stw++;
$sth++;
$x++;
$stw++;
$sth++;
$x++;
$stw++;
$sth++;

}while(
$stw<=200);
$bluealp imagecolorallocatealpha $image000);
ImageRectangle($image0014959$bluealp);
ImageRectangle($image1114858$bluealp);
ImageRectangle($image2214757$bluealp);
$bluealp imagecolorallocatealpha $image000);

$pos=rand(0,1);
$ang=rand(0,20);
if(
$pos){
$angle=0+$ang;
}else{
$angle=0-$ang;
}
imagettftext($image34$angle1046$bluealp"gilr.ttf"$t1);
$pos=rand(0,1);
$ang=rand(0,20);
if(
$pos){
$angle=0+$ang;
}else{
$angle=0-$ang;
}
imagettftext($image34$angle4546$bluealp"gilr.ttf"$t2);
$pos=rand(0,1);
$ang=rand(0,20);
if(
$pos){
$angle=0+$ang;
}else{
$angle=0-$ang;
}
imagettftext($image34$angle8046$bluealp"gilr.ttf"$t3);
$pos=rand(0,1);
$ang=rand(0,20);
if(
$pos){
$angle=0+$ang;
}else{
$angle=0-$ang;
}
imagettftext($image34$angle11546$bluealp"gilr.ttf"$t4);

ImagePng($image);  
ImageDestory($image);  
?>
Funciona: http://bayresart.com/imgs/ivf.php [SOLUCIONADO]

Para verlo en funcionamiento.

Antes del formulario.
Código PHP:
 $text $HTTP_SESSION_VARS[text];
  
$nueva explode("---"$text);
  
$varis .= $nueva[0];
  
$varis .= $nueva[1];
  
$varis .= $nueva[2];
  
$varis .= $nueva[3];
  
//ereg_replace();
  
  
$varis=strtolower($varis);
  
$imgs=strtolower($imgs);
  if (
$imgs == $varis)
  {
    
$HTTP_SESSION_VARS[humano] = "HUMANO";
  } 
Ahora hay que ver si es humano enviar y sino mensaje de error.
Desde ya gracias por revisar.
__________________
-- May The Force Be With You --

Última edición por mapper; 20/12/2007 a las 19:18 Razón: Faltaba una tipografia
  #2 (permalink)  
Antiguo 20/12/2007, 19:08
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Que opinan? Imagen anti-bot

Mmmm... creo que ese script es muy util como anti-bot, pero tambien como anti-human... Premio al que decifre que dice aqui:



Debes estar cometiendo algún error en la función que inserta los textos... Revisa que las fuentes que usas estén en los sitios correctos.

Un saludo,
  #3 (permalink)  
Antiguo 20/12/2007, 19:16
Avatar de mapper  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Re: Que opinan? Imagen anti-bot

Disculpame, que manera de hacer perder el tiempo a la gente. mientras tanto les muestro este:
http://pimentel.bayresart.com/img/ivf.php


El otro le subo la tipografia despues.
__________________
-- May The Force Be With You --
  #4 (permalink)  
Antiguo 20/12/2007, 19:24
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Que opinan? Imagen anti-bot

Ahora si

Pero, siempre me muestra el mismo número (8359). Sería bueno que alternes entre diferentes tipografías similares pero diferentes. Finalmente, el fondo no me convence del todo XD.

Otra cosa, es mejor que uses $_SESSION en vez de $HTTP_SESSION_VARS. Este último array superglobal largo quedará obsoleto e inutilizable a partir de PHP6.

Un saludo,
  #5 (permalink)  
Antiguo 20/12/2007, 19:34
Avatar de mapper  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Re: Que opinan? Imagen anti-bot

Te muestra siempre el mismo por la session. (hay un destroyhuman.php) para generar otra imagen.
uso php 4 por lo que no me preocupo demaciado. (me quedo con lo viejo)
__________________
-- May The Force Be With You --
  #6 (permalink)  
Antiguo 20/12/2007, 20:10
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Que opinan? Imagen anti-bot

Hola, la imagen del Captcha está bastante bien. Si no temes a un spammer avanzado que se de el trabajo de crear un sistema especial para tu captcha.
Solo tengo dos recomendaciones:
1.- Que los círculos del fondo no tengan siempre la misma separación. Eso hace que sea relativamente fácil eliminar el ruido que provocan y quedar con una imagen bastante limpia para hacer OCR
2.- Buscaría hacer que las letras se solaparan un poco, al tenerlas separadas haces que la fase de identificación de ejes (el primer paso para romper un Captcha luego de quitar el ruido) sea sencilla... pero si se tocan siquiera, se complica considerablemente.

Pero esto es si quieres ser "exquisito", si no, está genial. Excelente CAPTCHA... por cierto, ¿está libre para copia con crédito a ti? estaría bien que lo colocaras en un archivo con una licencia tipo LGPL y lo distribuyeras.

Saludos
  #7 (permalink)  
Antiguo 18/06/2008, 21:53
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años
Puntos: 2
Respuesta: Que opinan? Imagen anti-bot

muy chulos si señor.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #8 (permalink)  
Antiguo 18/06/2008, 22:30
Avatar de Tombar  
Fecha de Ingreso: junio-2008
Ubicación: /home/tombar
Mensajes: 198
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Que opinan? Imagen anti-bot

En lo personal he roto algunos captchas por hobby y voy a intentarlo con este tambien en cuanto tenga una o dos tardes libres :P

Quiero aportar 2 cosas a partir de mis experiencias.

1 - El mayor error de los captchas no esta en la imagen sino en como pasan del captcha a php el codigo correcto para validarlo luego. En general es mas eficiente decifrar esto una ves y meterlo a una BD en muchos casos que hacer ocr en cada captcha.

2 - Estas re-inventando la rueda :)

Bolilla Xtra - No joder al usuario tampoco, como el caso de los indecifrables gatitos de rapidshare (al menos yo no logro hacerlo bien)

No pretendo ofender con mi comentario en lo absoluto, sino aportar la vision del otro lado del problema :P piensen del lado del que le interesa romper el captcha un momento las formas y metodos que usarian para decifrarlo :P
  #9 (permalink)  
Antiguo 19/06/2008, 13:37
Avatar de mapper  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Respuesta: Que opinan? Imagen anti-bot

Antes que nada quiero aclarar un par de cosas que obviamente desde que armé el primero me di cuenta.
  1. El array de caracteres posibles no contiene el abecedario completo, sino una lista reducida para evitar las confusiones comunes (ej: O/0 I/l ...)
  2. La manera de definir el array de caracteres se puede simplificar a una linea (explico abajo).
  3. Odiaba los clases y ahora seguramente lo solucionaría de otra manera.
  4. Alguien una vez me dijo que la mejor seguridad no es la cerradura mas difícil de abrir sino la mas difícil de encontrar. Por lo que antes de recurrir a algo que alguien armó y es super bueno prefiero armar algo nuevo que no cuadra con los estandares establecidos por los spamers (ya que no vale la pena molestarse para crackear el captcha).
Hay varias maneras de definir un array y todo depende de para que lo quiere uno.

Código PHP:
$leter[]="A"//este sistema facilita mucho la lectura
$leter[]="B";
$leter[]="C";
$leter[]="D";
$leter[]="E";
$leter[]="F";
/////////////////////////////////////////////////////
range();// podemos hacer mucho con esta funcion... consulten www.php.net/range

//Como muchos saben php hereda muchas cosas de C por lo que los strings pueden ser tratados como matrices de caracteres.
$leter="ABCDEF";// esto se puede tratar de la misma manera que el primer ejemplo.
// teniendo en cuenta esto podemos usarlo para validarlo ya que no necesitamos
//poner --- entre cada caracter. Podemos hacer referencia mediante:
 
$text $HTTP_SESSION_VARS[text];
$text[2];// esto corresponde al 3er caracter del string.

//Bueno, tambien tenemos la manera tradicional:
$leter = array("A""B""C"); //personalmente no me gusta esta manera. 


Cita:
Iniciado por okram Ver Mensaje
Mmmm... creo que ese script es muy util como anti-bot, pero tambien como anti-human... Premio al que decifre que dice aqui:



Debes estar cometiendo algún error en la función que inserta los textos... Revisa que las fuentes que usas estén en los sitios correctos.

Un saludo,
Eso es muy importante... Sin los textos en los lugares correctos no podemos hacer nada....

Cita:
Iniciado por pragone Ver Mensaje
Hola, la imagen del Captcha está bastante bien. Si no temes a un spammer avanzado que se de el trabajo de crear un sistema especial para tu captcha.
Solo tengo dos recomendaciones:
1.- Que los círculos del fondo no tengan siempre la misma separación. Eso hace que sea relativamente fácil eliminar el ruido que provocan y quedar con una imagen bastante limpia para hacer OCR
2.- Buscaría hacer que las letras se solaparan un poco, al tenerlas separadas haces que la fase de identificación de ejes (el primer paso para romper un Captcha luego de quitar el ruido) sea sencilla... pero si se tocan siquiera, se complica considerablemente.

Pero esto es si quieres ser "exquisito", si no, está genial. Excelente CAPTCHA... por cierto, ¿está libre para copia con crédito a ti? estaría bien que lo colocaras en un archivo con una licencia tipo LGPL y lo distribuyeras.

Saludos
Es una buena idea... y la voy a tener en cuenta, pero creo que mas que mostrarlo en forosdelweb no da para mucho mas esto ya que la idea es hacer algo diferente.

Cita:
Iniciado por Tombar Ver Mensaje
En lo personal he roto algunos captchas por hobby y voy a intentarlo con este tambien en cuanto tenga una o dos tardes libres :P

Quiero aportar 2 cosas a partir de mis experiencias.

1 - El mayor error de los captchas no esta en la imagen sino en como pasan del captcha a php el codigo correcto para validarlo luego. En general es mas eficiente decifrar esto una ves y meterlo a una BD en muchos casos que hacer ocr en cada captcha.

2 - Estas re-inventando la rueda :)

Bolilla Xtra - No joder al usuario tampoco, como el caso de los indecifrables gatitos de rapidshare (al menos yo no logro hacerlo bien)

No pretendo ofender con mi comentario en lo absoluto, sino aportar la vision del otro lado del problema :P piensen del lado del que le interesa romper el captcha un momento las formas y metodos que usarian para decifrarlo :P
Mi idea es un poco re-inventar la rueda para no caer en el muy conocido captcha que cualquiera pasa por arriba.
Los gatitos son malos sobre las letras, por que hay un perro que parece gato y siempre me lo confundo.

Bueno, pronto cuando tenga un poco de tiempo prometo volver a armar esto y darle un par de vueltas mas de tuerca para hacerlo en menos de 10 lineas (o algo asi que sea corto...)



Gracias a todos por sus comentarios y aportes...
__________________
-- May The Force Be With You --
  #10 (permalink)  
Antiguo 19/06/2008, 14:24
(Desactivado)
 
Fecha de Ingreso: mayo-2008
Mensajes: 85
Antigüedad: 16 años
Puntos: 1
Respuesta: Que opinan? Imagen anti-bot

Muy buen captcha si señor :p

  #11 (permalink)  
Antiguo 19/06/2008, 21:56
Avatar de mapper  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Respuesta: Que opinan? Imagen anti-bot

Bueno, como dije, tengo una nueva versión del captcha (posteo solamente la parte que genera las imagenes por que sino no me dan 12 lineas.)

Código PHP:
<? Header("Content-type: image/jpeg");
$im imagecreatefromjpeg  ("captcha/".rand(1,12).".jpg");
$hm=strlen($letters="ABCDEFGHJKLMNPQRSTUVWXZ23456789")-1;
$bluealp imagecolorallocatealpha $im000);
$t=$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)];
putenv('GDFONTPATH=' realpath('.'));
imagettftext($imrand(55,60), 020rand(63,70), $bluealp'gilr'$t[0]);
imagettftext($imrand(55,60), 045rand(63,70), $bluealp'gilr'$t[1]);
imagettftext($imrand(55,60), 070rand(63,70), $bluealp'gilr'$t[2]);
imagettftext($imrand(55,60), 095rand(63,70), $bluealp'gilr'$t[3]);
Imagejpeg($im);
Imagedestroy($im);?>
Vamos a explicar que significan estas cosas:
<? <--- este es el tag de apertura, tambien puede ser <?php y en algunos casos puede ser <%

Header("Content-type: image/jpeg");
<--- esto le dice al navegador que es lo que está leyendo, pueden probar sacarlo para probar que pasa y ver el código fuente.

$im = imagecreatefromjpeg ("captcha/".rand(1,12).".jpg");
<--- Creamos una imagen desde uno de los 12 jpgs que hay en la carpeta "captcha", debemos tener en cuenta que el tamaño de la imagen se define a partir del tamaño del jpg sorteado. (en este caso todos miden 200*70px)

$hm=strlen($letters="ABCDEFGHJKLMNPQRSTUVWXZ234567 89")-1; <--- Guardamos muchos caracteres en $letters, lo medimos y su resultado le sacamos 1 y lo guardamos en $hm (How Many)

$bluealp = imagecolorallocatealpha ( $im, 0, 0, 0, 0 ); <--- creamos un color (negro) con 0 alpha para la img $im y guardamos su identificador en $bluealp (este nombre es por que lo saqué del anterior)

$t=$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)];
putenv('GDFONTPATH=' . realpath('.'));
<--- guardamos 4 caracteres aleatoriamente seleccionados en $t para luego mostrarlos en la imagen. (si quieren usar la parte de la session en alguna parte es acá donde tienen que usarla.)

putenv('GDFONTPATH=' . realpath('.')); <--- Establecemos el directorio actual como directorio de fuentes para GD (esto nos salva de un error que aparece bastante)

imagettftext($im, rand(55,60), 0, 20, rand(63,70), $bluealp, 'gilr', $t[0]); <--- De izquierda a derecha:
  1. $im es el identificador de la imagen
  2. rand(55, 60) hace que el tamaño de la fuente varíe entre 55 y 60...
  3. 0 es la inclinación dada para el texto que estamos imprimiendo sobre la imagen
  4. 20 es la distancia al 0 sobre el eje X
  5. rand(63, 70) es la distancia al 0 sobre el eje Y (esta varia entre 63 y 70 en este caso)
  6. $bluealp es el identificador del color
  7. "gilr" es el nombre de la fuente sin la extencion(php agrega automáticamente la extención)
  8. $t[x] es el caracter de $t.
(Todo esto aparece 4 veces en el programa, yo lo aclaro una vez.)

Imagejpeg($im); <--- Esto crea la imagen en un lenguaje que solo un interprete puede traducir a colores bonitos... Digamos que es lo que arma todo lo que pusimos antes.

Imagedestroy($im); <--- esto saca de la memoria (del servidor) todo lo necesario para que el cliente vea la imagen

?> <--- a que no saben que es esto?

Les dejo unas imágenes generadas por este programita:



Acá tienen una generada dinámicamente por mi server:

Su URL es http://www.bayresart.com/fdw/captcha.php por si quieren entrar a verla. (apretar F5 varias veces sobre Foros Del Web no es buena idea.)

Bueno, pueden hacer lo que sea... Con un poco de astucia...

TODO ADENTRO DE UN RAR ACÁ: http://www.bayresart.com/fdw/captcharar.rar (boton derecho, guardar enlace como)
Creo que es todo, solo armar la presentación me llevo mas tiempo que el programa....

"Quidquid latinum dictum sit, altum sonarum"
__________________
-- May The Force Be With You --

Última edición por mapper; 19/06/2008 a las 21:57 Razón: Me olvide del rar
  #12 (permalink)  
Antiguo 20/06/2008, 00:41
Avatar de shaggyz  
Fecha de Ingreso: mayo-2008
Mensajes: 43
Antigüedad: 16 años
Puntos: 3
De acuerdo Respuesta: Que opinan? Imagen anti-bot

Hola Mapper!

te felicito por tu trabajo, la verdad que está muy bueno
es como el ko-i-nnor "poderoso el chiquitin", en solo 12 lineas lo que hace lo hace muy bien. Estaba pensando en agregarle colores aleatorios a las letras, si lo llego a hacer lo posteo. Saludos!
  #13 (permalink)  
Antiguo 20/06/2008, 06:35
Avatar de Tombar  
Fecha de Ingreso: junio-2008
Ubicación: /home/tombar
Mensajes: 198
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Que opinan? Imagen anti-bot

Yo le cambiaria la tipografia por una mas tipo arial, la actual se asemeja mucho a times new roman y las terminaciones de las letras te juegan encontra a la hora del OCR

Sin duda es de los captchas mas lindos que he visto :D felicitaciones!
  #14 (permalink)  
Antiguo 23/06/2008, 12:02
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Que opinan? Imagen anti-bot

Extraordinario mi estimado que ejemplo has dado pues yo te felicito y pienso usarlo ya que necesito este tipo de seguiridad en un site asiq ue mil gracias y sigue asi aportando..
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #15 (permalink)  
Antiguo 23/06/2008, 12:06
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Que opinan? Imagen anti-bot

Disculpen por volver a postear pero no entiendo algo ya me esta generando las imagenes con los caracteres pero cuando trato de poner algo mas en el codigo la imagen se truena o bien desaparece ...

Este codigo debe ir solo o le puedo agregar mas codigo...


Espero su amable respuesta..
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #16 (permalink)  
Antiguo 23/06/2008, 12:23
isra00
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Que opinan? Imagen anti-bot

Bueno, después de todo lo que se ha dicho, poco queda por añadir. Yo también he construido un sistema CAPTCHA pero he terminado desecharlo ya que re-captcha es excelente. Es un servicio captcha externo, que usan, entre otros, en Facebook:

http://recaptcha.net/
  #17 (permalink)  
Antiguo 07/07/2008, 06:24
Avatar de cplus  
Fecha de Ingreso: abril-2007
Mensajes: 164
Antigüedad: 17 años
Puntos: 1
Respuesta: Que opinan? Imagen anti-bot

te felicito, muy interesante tu aporte, y muy sencillo de integrar como dios manda.

conozco la web que el compañero menciona, en alguna ocacion he jugado con ella.

pero prefiero lo hecho a mano, y mas cuando se llegan a estos puntos.

sobre la seguridad cierto es que no todo esta en la imagen, ahora despues viene lo bueno, la validacion.

usas sessiones para traer ese valor y mostrarlo es lo suyo.

luego un sistema completo anti-injection, pero claro, mas depurado para el anti-boot que como vemos usa en este caso de la A a la Z, aunq cambiando a 0 a 9 seria otra solucion.

Ahora lo que estaria bien tambien, son los tipicos que generan operaciones matematicas simples, de tipo.

3+3=
4x7=
1x1=

y nosotros respodemos:
6
28
1

salu2

pd: sigue dandole caña y esto se puede convertir en una buen a classe con multiples opciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:36.