[Php-avanzado] PHP avanzado
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Vie Mar 4 00:09:50 ART 2016
Hola Martín,
El jue, 03-03-2016 a las 10:48 -0300, martin perez escribió:
> Buen día Leo, quiero hacerte una consulta referente al saneo de
> entrada de datos en un formulario.
> Si bien dijiste que es mejor sanear los datos a la salida para no
> perder datos, yo estoy haciendo una prueba de sanear datos HTML a la
> entrada.
Bueno, no... lo que dije es que tienen que sanear todas las entradas y
las salidas.
Puntualmente al guardar en la DB, dije que tienen que elegir si sanear
al guardar o sanear el mostrar, y recomendé que cualquiera de las dos
opciones que usen la mantengan en todo el software.
> En un formulario de contacto estoy validando los datos con la función
> addslashes, lo cual tengo entendido que devuelve un string con barras
> invertidas delante de los caracteres que necesitan ser escapados. Por
> ejemplo la comilla simple, comilla doble y la barra invertida.
Es correcto, esto hace addslashes().
Sin embargo este saneo es insuficiente para prevenir inyecciones HTML,
JS, PHP y SQL. Para lo que sirve principalmente es para no romper la
query, pero eso solo no es un saneo completo.
> Ahora bien, cargo los datos en mi formulario de contacto, Ingresando
> datos + comillas simples, comillas dobles y barra invertida en
> cualquier orden,
> los validos con la función y los muestro por pantalla antes de ser
> enviados a la BD, para asegurarme que los datos fueron convertidos.
Ok.
> La conversión de caracteres funciona bien. Es decir, los imprime bien.
> La duda es, que inmediatamente son guardados, y al mirar la BD, estos
> caracteres fueron guardados como primeramente fueron ingresados.
Esto es correcto.
> ¿Esto debería ser así o estoy haciendo algo mal?
Es así. La función de un caracter de escape es preservar el valor
especial que puede tener un caracter.
Por ejemplo, si querés guardar en una tabla la cadena:
hola\nmundo
verías que te queda guardado
hola
mundo
(con un enter), porque \n es, justamente la secuencia de escape para
poner un enter.
Para no perder la entrada literal, addslashes() te cambia esta
secuencia a:
hola\\nmundo
es decir, agrega una \ adelante de la barra, con lo que estás diciendo
que el caracter que sigue a \ es literalmente \
Entonces al ver el dato guardado vas a ver:
hola\nmundo
que era la cadena original y lo que querías guardar.
> Saludos
=mente!
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado