Desde hace algún tiempo anda rondando un robot mi web, sobre todo el apartado del blog. Le gusta dejarme mensajes extraños y continuar su andadura. Aquí os dejo un log de sus andanzas:

 Processing by CommentsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"iAe5qpFHJhfd9iM0Cw9JB9Ic6fAA1JMwUfZGJi4jFHI=", "comment"=>{"user"=>"4CAbb9  <a href=\"http://fcixfeiyllmt.com/\">fcixfeiyllmt</a>, [url=http://zatqgobeyusn.com/]zatqgobeyusn[/url], [link=http://cdnhkbtgjctd.com/]cdnhkbtgjctd[/link], http://bcmwkxcoeccc.com/", "email"=>"hudnvx@stkrro.com", "body"=>"4CAbb9  <a href=\"http://fcixfeiyllmt.com/\">fcixfeiyllmt</a>, [url=http://zatqgobeyusn.com/]zatqgobeyusn[/url], [link=http://cdnhkbtgjctd.com/]cdnhkbtgjctd[/link], http://bcmwkxcoeccc.com/"}, "commit"=>"Nuevo", "blog_id"=>"conferencia-ruby-on-rails-en-ciudad-real"}
  Rendered comment_notifier/contact_me.html.erb (0.2ms)
  Rendered comment_notifier/contact_me.text.erb (0.0ms)

Así que me he tomado un poco más en serio el tema de la seguridad. Actualmente proteger un formulario de entradas indebidas ya lo hace rails gracias al authenticity_token que nos protege de la inyección SQL. El problema es si es un robot al que le apetece ir dejándonos comentarios, enviándonos emails o accediendo a nuestro formulario para rellenarlo con datos falsos por el simple beneficio de llenarnos de tonterías la base de datos y hacernos quedar mal.

La solución más fácil es preguntar en el formulario ¿eres un robot? Seguramente el respondería que no así que lo mejor sería examinarlo. Lo infalible sería usar las tres leyes de la robótica de Asimov (estas nunca pueden fallar),  el problema es que lo mismo algún humano se termina cansando de tanta pregunta. También podríamos usar un test de Turing pero entonces sí que estaríamos empeorando la situación porque necesitamos un humano que examine. Así que solo nos queda hacer una única pregunta infalible… esa pregunta infalible se llama “Captcha” (Completely Automated Public Turingtest to tell Computers and Humans Apart, en Español: prueba de Turing completamente automática y pública para diferenciar computadoras de humanos).

Ninguna maquina es capaz de responder preguntas del tipo: "Si mato al padre de mi padre antes de nacer, entonces crearía una…", la respuesta es paradoja. Si, sé que tu si la sabias porque eres humano ;) y puedes razonar la pregunta. Un robot no entiende a menos que coteje y busque en una base de datos, así que ya tenemos solución.

Rails para esta solución como de costumbre tiene una gema, se llama "humanizer". Esta gema esta en varios idiomas y tiene preguntas bastante sencillitas que un humano puede responder fácilmente. Alguien podría pensar: pues cogemos esas preguntas, se las programamos a nuestro robot y asunto resuelto. Si, esa sería la solución, por eso existen multitud de formas de captcha como el captcha que usa google reCaptcha que usa imágenes. Se puede usar cualquier cosa, un sonido, videos, un puzle, cualquier cosa que una máquina no pueda entender porque tenga un razonamiento.

No os voy a explicar cómo se usa la gema porque es muy fácil de usar y viene muy bien explicada. De todas maneras si tenéis dudas mirad como la uso en el código fuente de esta web y para cualquier cosa usad el formulario de contacto y veremos cómo arreglarlo. Seguro que no tendrás problemas en el formulario con el captcha, humano lector Bip bip.

 

¡Saludos a todos!

 

Volver