Evitar sql injection y xss

Rodrigo Fuentealba darkprox en gmail.com
Vie Sep 21 15:41:22 CLT 2007


El 21/09/07, Alvaro Herrera <alvherre en alvh.no-ip.org> escribió:
> Claudio Salazar escribió:
> > Cristian Rodriguez escribió:
>
> >> No, solo preocupate de **mostrarlas** con las caracteres potencialmente
> >> dañinos.
>
> Cristian tiene razon.  Para evitar el XSS, lo que hay que hacer es
> evitar que el navegador interprete el tag como si fuera HTML.  Para
> esto, lo mas facil es escapar los caracteres peligrosos (creo que con
> escapar el < deberia ser suficiente pero no estoy seguro).

Si te pones a pensar en todas las posibilidades, no es suficiente.
Ponte a pensar en un trozo de código que quieres postear (pensando en
un blog, naturalmente; o en una aplicación de educación a distancia,
como una que estoy haciendo ahora).

> Asi,
> cualquier HTML que el atacante quiera hacer pasar por tu sitio, se veria
> como un pedazo de texto en el navegador del usuario, con lo cual el
> ataque deja de funcionar (por ej. si es un link, ya no es cliqueable).

IMHO, si bien tiene razón en un aspecto, en otros que son igualmente
comunes, no sirve de tanto esa forma. Generalmente para algunas
aplicaciones necesitamos guardar tags html como válidos (por ejemplo,
aplicaciones con contenido dinámico como los portales de periódicos en
línea).

Llevar un tracking de aquellos elementos que en un nombre de pila no
serían permitidos pero en el campo "contenido" de un blog sí lo son,
en tablas separadas horribiliza el modelo, hace más compleja la
programación y al final se me ocurren dos soluciones:

1.- Guardar el contenido del fckeditor o el tiny_mce, tal como se
genera, en la base.
2.- Generar una suerte de metalenguaje que me permita insertar
imágenes y links sin usar tags html, como {% img="imagen.jpg" style=""
%} o {% link="http://www.google.cl" text="Google" %} (algo como el
funcionamiento de los BBCodes)

Ok, con la primera, volvemos a lo mismo, salvo que validemos todo el
resto de los datos al momento de ingresar en la base de datos; la
forma correcta de hacer las cosas es la forma más natural.

Con la segunda, difícilmente llegaremos a hacer algo realmente bueno,
por ejemplo con tablas (critíquenme por las tablas, pero que conste
que a veces necesitamos insertar datos tabulares), y el esfuerzo será
útil, pero siempre nos quedaremos cortos.

Mi idea es, lógicamente, pensando en DRY y KISS.

-- 
Rodrigo Fuentealba



Más información sobre la lista de distribución Linux