Blog de David Rodriguez

Internet, tecnologia, programacion, SEO

Archive for the 'Programacion' Category

Proteger formularios contra robots y web spam

May 20th, 2008 by David

Todo el que tenga formularios en internet, más tarde o más temprano, tendrá robots que le envian información para intentar introducir en su base de datos urls, etc.

Un sistema bastante común es el de Captcha, que es la tipica imagen distorsionada, el cual no me gusta como usuario, ya que es obligar al usuario a utilizar un campo más de un formulario, lo que puede hacer perder un posible usuario (a mi me pasa ;) ). Ademas, los programas OCR reconocedores de imagenes, hacen que las imagenes sean tan distorsionadas que son incluso complicado para un humano reconocerlas. Como veis, no es un campo que me guste, con lo cual, quien quiera proteger sus formularios de esta forma, pues tiene multiples módulos para generar estas imagenes, yo prefiero otras formas.

A continuación, paso a detallar posibles metodos anti-robot los cuales he utilizado para proteger los formularios. Cuanto más pongas, mas dificil tendrá el robot introducir su porquería. Algún ejemplo estará realizado en php, aunque la idea se puede exportar a todos los lenguajes. Para entendernos mejor, llamaremos Pagina1 a la pagina del formulario y Pagina2 a la pagina donde se realiza la operacion de negocio de ese formulario(envio correo, guardar en base de datos, etc).

1.- Realizar comprobaciones de los datos en el lado del cliente y en el lado de servidor.

Obviamente, solemos realizar las comprobaciones Javascript en el lado del cliente para que el “usuario normal” no introduzca datos erroneos en la Pagina1. Los robots se saltan esta limitación, asi que debemos comprobar en el servidor, que todos los datos tienen el formato correcto, en la Pagina2.

Por ejemplo, si pedimos el telefono o código postal, pues en el lado del servidor debemos comprobar que nos llega un dato numérico , o la misma comprobación que hagamos en javascript.

2.- Controlar la sesión del usuario.

Controlar mediante sesiones, que el usuario que entra en la Pagina2 viene exclusivamente de la Pagina1. Es decir, tenemos una variable que guardamos en la sesion del usuario, por ejemplo, con valor 1, y cuando leamos esa variable en Pagina2, pues si tiene ese valor es que viene de Pagina1, y modificamos su valor para que tenga que volver a pasar por el formulario. De esta forma, tambien limitamos que el usuario pueda dar 100 veces a refrescar la página, y nos introduzca sus datos 100 veces.

3.- Introducir un campo oculto en el formulario con la una clave dinámica y encriptada.

Podremos poner en el formulario, un campo “hidden” cuyo valor sea una clave encriptada que nosotros sabemos. Si esta clave es dinámica, pues mucho mejor.

Por ejemplo,

<input type=”hidden” name=”clave” value=”<?=md5(’CLAVEqueQueremos’.$datodinamico.$numeroaleatorio)?>”

Es decir, en este ejemplo, nos generamos una clave con los siguientes campos:

- CLAVEqueQueremos: Una cadena de texto que nosotros definimos y que solo nosotros conocemos.

- $datodinamico: algun dato que identifique al formulario y que sea dinamico, si por ejemplo estamos haciendo una compra de un producto, pues el productoId sería la opción

- $numeroaleatorio: Número aleatorio que generamos en cada petición y que podemos pasarselo a la Pagina2 en otro campo hidden o guardarlo en una tabla o fichero temporal para consultarlo desde Pagina2.

Una vez hecho esto, se encripta para que el resultado visible en el navegador sea una cadena de texto extraña. Aquí he puesto como ejemplo el metodo de encriptación md5, pero se puede utilizar cualquier método de encriptación.

En Pagina2, volvemos a generar esta clave, la encriptamos, y comprobamos que es lo mismo que nos viene de Pagina1 del campo “clave”.

4.- Introducir un campo oculto por css con nombre email

Introducir un campo cuyo nombre contenga la palabra “email”, y ocultarlo con estilos(style=”display:none”). En el value del campo, introducimos un valor que no sea un email, ya que está comprobado que los robots rellenan con un email aleatorio todos los campos que encuentran con ese nombre. De esta forma, en Pagina2, podemos comprobar que ese campo que nos llega no tenga formato de email.

Ejemplo:

En Pagina1:

<input type=”text” name=”emaildementira” value=”A” style=”display:none”>

En Pagina2:

Comprobamos que en el campo “emaildementira” no nos llega una @.

Con todo esto, lo que haremos será entorpecer un poco más los robots de envio de porqueria con formularios. Esto evoluciona cada día, con lo cual, no es una panacea, pero por lo menos se lo ponemos más dificil a los spam-robots. Por lo menos que el programador que lo ejecuta … que se lo curre un poco más.

Si teneis algún otro método que no conozca .. aquí estamos para conocerlo.

Si alguno tiene muchos problemas de realizar estos pasos, que me mande un email que se lo explico con más detalle.

Espero que os sirva.

Category: Internet, Programacion, Seguridad | 4 Comments »

Optimiza tu codigo de programación

April 14th, 2008 by David

Es increible como cuando repasas codigos de hace unos años, te das cuenta, que se puede optimizar muchisimo .. obviamente la experiencia es un grado.

Hay unas técnicas que sirven para todos los lenguajes, la cual todo el mundo deberiamos tener muy presente .. aunque muy pocos las utilizamos (me incluyo en ambas). La cantidad de programadores que hay en el mundo es enorme … el numero de programadores que optimicen su codigo es muy reducido … creo que nos conformamos con lo que sabemos, y no vemos que los lenguajes de programación son unos seres vivos … que van creciendo y facilitando vida con nuevas funciones.

Es imposible aprenderse todas las funciones … pero un repaso por el manual para ver si algo ya esta hecho en vez de hacerlo .. es una muy buena practica. Ojo!!!! repaso por el manual del propio lenguaje .. no buscar en nuestro querido google a ver si alguien lo ha hecho ya.

Me he encontrado unas pautas de programación para php, pero que como digo .. algunas se pueden hacer extensibles a todos los lenguajes …

Category: Programacion | 1 Comment »

Trucos para google

March 31st, 2008 by David

Buenas, siguiendo los temas hablados anteriormente sobre posicionamiento google, paso a detallar algunos elementos que pueden ser muy obvios .. pero que puede que haya gente que desconozca.

Para un buen posicionamiento google debes tener una web:

- Sin fallos: es decir, todos los enlaces deben estar correctamente enlazados. Si hemos introducido la web en “Herramientas para Webmaster” de google, en ella nos dira los errores de enlaces que tenemos. Tambien mirar los logs del servidor, nos va a ser de mucha ayuda. Un log limpio, hace que la web vaya mas rapida, puesto que se minimizan los accesos a fichero(log) y ademas no nos penaliza en posicionamiento google.

- Todos los titulos, metas y descripciones, deben de ser unicos para cada pagina, y deben de ser ajustados para las palabras de busqueda de cada pagina.

- Una actualizacion de los contenidos de las paginas mejora el posicionamiento google. manten paginas activas, donde google encuentre cambios. Eso quiere decir que la pagina esta activa y google la posicionara mejor.

Bueno .. espero os sirva de ayuda .. mas trucos para google en siguientes capitulos … si os interesan claro.

Category: Internet, Programacion, SEO | No Comments »

No se ven imagenes en la web

March 21st, 2008 by David

Buenas, a continuacion pongo un problemilla que me ha pasado .. que puede salvar muchas horas de ver porque esta pasando.

Ocurre cuando subimos un archivo imagen a la web, en formato jpg o gif, y la imagen no la carga en la web .. sin embargo en el Sistema operativo del ordenador, se ve perfectamente.

Esto puede pasar, porque la imagen esta grabada en formato CMYK, en vez de en formato RGB.

Es una problema muy simple que se resuelve muy facilmente … si sabes el porque claro …

Espero que os haya sido de ayuda.

Category: Internet, Programacion | No Comments »

Buscamos programador de confianza en Activolution

March 12th, 2008 by David

Buenas, despues de semanas intentando obtener algún becario o persona de prácticas para hacer desarrollos web, veo que es muy tedioso y complicado, y la gente que nos manda la universidad no quiere trabajar o ya tiene trabajo, y los anuncios parece que no funcionan.

Por esto, si conoceis alguna persona interesada en trabajar desarrollando web para Activolution
con conocimientos de PHP, Java, Html, Javascript sobre bases de datos Oracle y Mysql, por favor, mandarme el curriculum a david at piensaennaranja.com.

Espero vuestros curriculums.

Category: Programacion | No Comments »