Cualquier administrador de una página web ha debido lidiar en algún momento con la desagradable intromisión de un robot en su página web que envía decenas de correos al día desde el formulario de contacto o registra infinidad de usuarios en el área de registro del sitio web.
La tecnología que permite que los robots y malware hagan esto no es nueva y los problemas que generan son bien conocidos sobrecargando los servidores de correo, enviando correo basura o explotando vulnerabilidades potenciales de la página web para crear un agujero de seguridad; a pesar de esto no es una práctica común de todos los desarrolladores web implementar elementos que limiten el acceso de robots a los formularios de las páginas web.
Hace ya algún tiempo el CAPTCHA [Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing completamente automática y pública para diferenciar computadoras (ordenadores) de humanos] ha sido empleado de manera bastante efectiva para diferenciar los usuarios humanos de las máquinas y así poder limitar de alguna forma los problemas generados por los spambots sin embargo, y a pesar de ser un código abierto, no son pocos los desarrolladores que encuentran problemas implementando el algoritmo CAPTCHA por lo que tienden a obviarlo dejando desprotegidos los formularios.
Si bien es cierto que con un poco de práctica el CAPTCHA puede ser dominado a la perfección e implementado de rutina en todos los formularios existen alternativas rápidas y fáciles de programar que bien pueden sustituir el CAPTCHA o complementarlo, una forma fácil de hacerlo es mediante una sentencia lógica de validación.
Las preguntas de validación son fáciles de estructurar siguiendo los siguientes pasos:
1- Almacenar en una base de datos el par pregunta - respuesta
2- Generar un código para seleccionar de manera aleatoria la pregunta a incluir en el formulario
3- Incluir en el formulario un campo para introducir la respuesta a la pregunta por ejemplo:
La Capital de Francia es: _____________________
4- Incluir un script de validación donde si la respuesta es correcta (la respuesta ingresada corresponde con la almacenada en la base de datos) procesa el formulario, de lo contrario da error y vuelva a inicio
Como se puede ver con un poco de manejo MySQL y PHP se puede programar un sistema de preguntas aleatorias bastante efectivo y seguro, como siempre no existe sistema invulnerable pero al menos limitará el ataque de un buen número de robots y malware.
A la hora de planificar los pares preguntas - respuesta deben considerarse algunos detalles técnicos para evitar mal funcionamiento, entre estas consideraciones están:
- Usar preguntas cuyas respuestas son conocidas por la mayoría de las personas o, en su defecto, son fáciles de encontrar en Google; si se colocan preguntas como ¿Cuál es la raíz cuadrada del coseno de 35º elevado a la 4ª potencia? es muy probable que nunca se reciba un correo electrónico generado en el formulario ni por seres humanos ni por máquinas.
- Tratar de usar preguntas cuyas respuestas sean de una, máximo dos palabras
- Programar los pares pregunta-respuesta en el idioma de nuestro público objetivo; si se toma un script en inglés para una página web dirigida a público hispanoamericano es muy posible que se reciban pocos correos generados en el formulario de contacto y si de registro de usuarios se trata muchos menos aún.
- Aplicar una función donde la cadena de texto se convierta siempre a minúsculas (escribiendo también la base de datos las respuestas control en minúsculas), de esta manera no importa como escriba la respuesta el usuario al filtrar con la función correcta la respuesta a comparar con el control estará siempre en minúsculas.
Con esto ya estamos listos para comenzar a preparar preguntas de seguridad teniendo siempre en mente que regularmente deben agregarse más preguntas a la base de datos, en estos casos mientras más mejor, partiendo de este punto las opciones son infinitas, sólo hay que ponerse a programarlas.
La tecnología que permite que los robots y malware hagan esto no es nueva y los problemas que generan son bien conocidos sobrecargando los servidores de correo, enviando correo basura o explotando vulnerabilidades potenciales de la página web para crear un agujero de seguridad; a pesar de esto no es una práctica común de todos los desarrolladores web implementar elementos que limiten el acceso de robots a los formularios de las páginas web.
Hace ya algún tiempo el CAPTCHA [Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing completamente automática y pública para diferenciar computadoras (ordenadores) de humanos] ha sido empleado de manera bastante efectiva para diferenciar los usuarios humanos de las máquinas y así poder limitar de alguna forma los problemas generados por los spambots sin embargo, y a pesar de ser un código abierto, no son pocos los desarrolladores que encuentran problemas implementando el algoritmo CAPTCHA por lo que tienden a obviarlo dejando desprotegidos los formularios.
Si bien es cierto que con un poco de práctica el CAPTCHA puede ser dominado a la perfección e implementado de rutina en todos los formularios existen alternativas rápidas y fáciles de programar que bien pueden sustituir el CAPTCHA o complementarlo, una forma fácil de hacerlo es mediante una sentencia lógica de validación.
Las preguntas de validación son fáciles de estructurar siguiendo los siguientes pasos:
1- Almacenar en una base de datos el par pregunta - respuesta
2- Generar un código para seleccionar de manera aleatoria la pregunta a incluir en el formulario
3- Incluir en el formulario un campo para introducir la respuesta a la pregunta por ejemplo:
La Capital de Francia es: _____________________
4- Incluir un script de validación donde si la respuesta es correcta (la respuesta ingresada corresponde con la almacenada en la base de datos) procesa el formulario, de lo contrario da error y vuelva a inicio
Como se puede ver con un poco de manejo MySQL y PHP se puede programar un sistema de preguntas aleatorias bastante efectivo y seguro, como siempre no existe sistema invulnerable pero al menos limitará el ataque de un buen número de robots y malware.
A la hora de planificar los pares preguntas - respuesta deben considerarse algunos detalles técnicos para evitar mal funcionamiento, entre estas consideraciones están:
- Usar preguntas cuyas respuestas son conocidas por la mayoría de las personas o, en su defecto, son fáciles de encontrar en Google; si se colocan preguntas como ¿Cuál es la raíz cuadrada del coseno de 35º elevado a la 4ª potencia? es muy probable que nunca se reciba un correo electrónico generado en el formulario ni por seres humanos ni por máquinas.
- Tratar de usar preguntas cuyas respuestas sean de una, máximo dos palabras
- Programar los pares pregunta-respuesta en el idioma de nuestro público objetivo; si se toma un script en inglés para una página web dirigida a público hispanoamericano es muy posible que se reciban pocos correos generados en el formulario de contacto y si de registro de usuarios se trata muchos menos aún.
- Aplicar una función donde la cadena de texto se convierta siempre a minúsculas (escribiendo también la base de datos las respuestas control en minúsculas), de esta manera no importa como escriba la respuesta el usuario al filtrar con la función correcta la respuesta a comparar con el control estará siempre en minúsculas.
Con esto ya estamos listos para comenzar a preparar preguntas de seguridad teniendo siempre en mente que regularmente deben agregarse más preguntas a la base de datos, en estos casos mientras más mejor, partiendo de este punto las opciones son infinitas, sólo hay que ponerse a programarlas.