Googlehoy

Anti-Spam en una Web

Voy a hablar de como evitar el spam en una web, eso no quiere decir que lo aplique en este blog, XD.


Como podréis comprobar, este blog tiene un captcha (desde hoy) muy sencillito

¿Porqué?
Porque no vivo de este blog, lo relleno cuando quiero, cuando se me ocurre algo o cuando alguién me da una idea.


¿Qué pasaría si vivieras de este blog?
Pues evitaría el spam tanto en los comentarios como en los correos que recibo o recibirían mis clientes.

¿Como?
Creando un captcha.
Siiii claro, ¿Poniendo un captcha preestablecido por una empresa externa a mi web? que listo.

¡¿Tú sabes leer?! #$%& ¡CREANDO UN CAPTCHA!
Pues eso, como me creo un captcha...

* Forma 1:


1.- Necesitas un programa para manipular imágenes en tu servidor, estilo aspjpeg que supongo que en php también existe
2.- Modificar tu htacces para que modifique cierto archivo.
3.- crear un formulario con el captcha y que reciba las vars en otro archivo, nunca en el mismo que envía.

* Forma 2
1.- Lo mismo que la forma 1 pero sin programa, simplemente poniendo un imput que muestre un texto y sin necesidad del htacces, menos seguro pero al menos eliminas el 80% del spam.


¿Como funciona?
Pues de la siguiente forma, te creas una función que recupere la fecha de hoy, en asp seria fecha=now().
Buscar el dia, mes, año y la hora, imagínate que es el 12/03/2012 a las 13h.
Creas 2 funciones de replace del 0-9 a alfabeto, un random de 0-1 para saber a que función de las 2 envías el string de la fecha.
Ya tienes la fecha remplazada a fecharemplazada=bc/ad/cabc bd, esto le quitas el / y el espacio y te quedaría bcadcabcbd <--- esto sería en una función pero imaginate que función 1 =
0=a,1=b,2=c,3=d etc...
Y función 2=
0=z, 1=y, 2=x etc...
Pues la variable quedaría fechareemplazada=bxzdcayxbd <--- esto ya empieza a parecer algo de encriptación XD, ahora le das la vuelta streverse... dbxyacdzxb.
Esto lo pasas como var a img src="http://www.tuweb.com/imgs/dbxyacdzxb.jpg"
Ahora el htacces dentro de la carpeta imgs le dices que imagen.asp?fecha= lo pase a variable.jpg con esto usarás un archivo asp como jpg o php o....
Ahora el archivo imagen.asp o php recoge la variable y la imprime en una imagen con el aspjpeg o el de php que no se como se llama.
Este texto ya se muestra dentro de una imágen y pides que lo pongan en un input llamado captcha.
Recuerda que el form debe apuntar a otro archivo.

Este archivo debe tener 3 cosas:
1.- Una funcion tipo replace a=0,z=0,1=b,1=y etc... y comprobar el resultado con la fecha y hora de hoy, digo la hora porque puede tardar más de un minuto en rellenar el captcha. (Yo no lo hago con fechas , lo hago con el ID del cliente que visitan o rl ID de la noticia donde quieren publicar un comentario)
2.- Una función que compruebe que el archivo de donde vienen es el archivo donde tenemos el form request.servervariables("http_referer"), esto lo hacemos para evitar los formularios enviados desde un sistema local con nuestro form.
3.- Yo esta la hago de más pero me bloquea el 100% del spam automático, en el form pongo la ip de quién la envió, eso si encriptada con la misma función que la fecha, id etc... al recoger el form vuelvo a comprovar la IP, desencripto la que recibo por form y las compruebo.

¿Y todo esto porqué? Pues porque hay ciertos programas que buscan formularios por la red, los rellenan con cierto texto preestablecido y le dan a submit. Estos programas una vez han encontrado el form, lo almacenan en una base de datos y lo visitan diariamente o más veces haciendo que se te llene una página de comentarios de links innecesarios, o peor aún, que un formulario de solicitud a un cliente sea envíado desde tu web cientos de veces al día.

¿Y lo de la IP porqué?
Pues porque estos programas han aprendido, bueno los programas no, digamos que sus programadores, y usan un proxy en cada página que visitan. Por ese motivo debe estar en 2 archivos diferentes, porque una vez envían el post se desconectan y si están en el mismo archivo no verías en los logs que usan ips diferentes.

Salu2 RK