Siguiendo con el tema de la inyección de SQL del post anterior, voy a intentar explicar en que consiste para los que no tienen ni pajolera idea de lo que estamos hablando pero sienten curiosidad.
En una página Web realizada sobre un gestor de contenido, es decir todas las páginas medianas o grandes y cada vez más también las pequeñitas, por ejemplo cualquier blog como este, la información de los textos que la componen se guardan en bases de datos, y cuando accedemos a alguna de las secciones o entradas del mismo, se realiza una consulta a la base de datos para que esta nos de los textos correspondientes a dicha sección o artículo. Pues bien, para que el sistema que soporta la página Web en cuestión sepa que información es la que se precisa en cada momento del total de información que almacena en la base de datos, se le debe “preguntar” por algo específico. Igual que no vas a la biblioteca y pides “un libro”, así en abstracto, sino un título en particular o los títulos de una temática concreta, cuando se le pregunta a la base de datos lo hacemos sobre un conjunto restringido de datos “dame la información del artículo X”. Para ello en cada enlace de una de estas páginas, por ejemplo cada una de las páginas que componen este blog, junto Conca dirección base de la página en cuestión, por ejemplo www.androidemagenta.com, ponemos una información extra, llamada parámetros, que le indican al sistema lo que buscamos. POr ejemplo, vamos al enlace de mi blog “De que va esto”, vemos que la URL esta compuesta por algo como esto: http://www.androidemagenta.com/?page_id=9. La primera parte, http://www.androidemagenta.com, es la dirección base, el dominio al que hacemos la petición, y la segunda parte “page_id=9″ es el parámetro, lo que le dice a mi página que el contenido que quiero cargar es en concreto la página que tiene como identificador interno el “9″. Es decir, los parámetros nos permiten preguntar al sistema y que este nos responda algo en concreto.
Hasta aquí no es nada raro ni incomprensible. El problema reside en lo que le “dejamos preguntar” al usuario o más concretamente, lo que estamos dispuestos a que le diga nuestro sistema. Por supuesto no hay una forma directa de preguntar a un sistema por los datos de todos sus clientes, pero al igual que en la vida, hay formas indirectas para “saber”. No hace falta que te diga que estoy casado porque has visto el anillo en mi mano. No hace falta decirla nada a esa chica de si le molaba el menda o no, porque cada vez que me movía, se movía ella, cuando me alejaba se acercaba ella, cuando iba al baño ¡Ops! me la tropezaba, siempre guapísima, siempre puestísima. No hacía falta preguntar nada directamente, porque hay mil formas de saber. La encontraba cerca de mi aunque estuviéramos cincuenta amigos y al entra al bar ella estuviera en la otra punta. Me lo decía de otra forma.
Por eso me parece tan refinada y hermosa esta técnica, porque es como ligar, sabes por deducción, sin preguntas vulgares, con códigos de matemática mágica. Mola.
Claro que cuando eres padre, es decir, programador, lo normal es que le enseñes a tu hija que no se habla con desconocidos y que no le diga ni a Blas nada de ella o de su vida o de dónde vive. Para evitar problemas es mejor que sólo se responda a determinadas preguntas, formuladas de una determinada manera. Vaya, una atención de tipo funcionariado.
Para eso una de las mejores maneras es utilizar procedimientos almacenados. Explicar su uso lo dejo para otra entrada. Lo que si diré al respecto de este tema es que si estas cosas pasan es porque no se utiliza esta técnica veterana de protección de datos (entre otras causas, claro, pero de forma destacada). Y no se utilizan por dos razones. Porque obligan a pensar más los sistemas, a estructurar mejor la aplicación desde el principio y eso casi nunca se puede hacer hoy día con auténticos analfabetos dirigiendo proyectos y empresas, y porque los directivos de las empresas desarrollan sus sistemas, especialmente sus webs, al dictado de la oportunidad marketiniana de turno, sin importarles un pijo las tripas de la aplicación, “esos códigos raros” que escriben los programadores y que nadie revisa entre otras cosas porque no hay gente preparada a tal efecto al frente de muchos proyectos ¿para qué, si no se ve? Que quieres si pones a un director de marketing al frente de un equipo de desarrollo…
En fin, a lo mejor después del pedazo de multón que les va a caer se lo piensan dos veces y hacen caso al jefe de proyectos y al cuerpo técnico la próxima vez que quieran lanzar una aplicación informática, incluidas las páginas Web.