Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Bug real_escape_string?

Estas en el tema de ¿Bug real_escape_string? en el foro de PHP en Foros del Web. Hola. Me he puesto a validar informacion de un campo de texto que puede contener hasta etiquetas HTML y javascript que posteriormente se deben de ...
  #1 (permalink)  
Antiguo 25/09/2013, 13:41
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta ¿Bug real_escape_string?

Hola. Me he puesto a validar informacion de un campo de texto que puede contener hasta etiquetas HTML y javascript que posteriormente se deben de mostrar como texto y no ejecutado por el navegador. El problema reside en que la longitud maxima de caracteres permitidos en el campo de texto son 60 y, evidentemente, la definicion de dicha columna es una varchar(60) con codificacion utf8. La cosa es que al enviar el formulario, el cual no sobrepasa el limite puesto de 60 caracteres me da un error. Me pongo a quitarle cosas y resulta que si que me lo admite por lo que miro en la tabla lo que se ha escrito y me encuentro caracteres del tipo <script type="text/javascript... por lo que ya se por que da el error, porque al ser evaluado por ese metodo, real_escape_string, me transforma todas las comillas en eso(") y demas cosas.

La pregunta es: ¿es normal que en almacene asi la informacion ese metodo?, si asi fuera ¿deberia de redefinir la longitud maxima de la columna a dios sabe que cifra?
Supongo que debe de tener algun error esa funcion porque no valido la informacion con otra funcion previa ni posterior.

Espero que con vuestra sabiduria me podais ayudar a solucionar este molesto problema.
Gracias
  #2 (permalink)  
Antiguo 25/09/2013, 13:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿Bug real_escape_string?

1. La función o método (obvio no podemos adivinar lo que hace exactamente) que mencionas puede no ser responsable de ello, en dado caso debería ser htmlspecialchars/htmlentitites o similares.

2. No, no es normal, al menos debería ser tan normal como lo hayas programado, sencillamente no puede hacer transformaciones a menos que lo hayas indicado en tu programación.

3. Si vas a escapar HTML (así se le llama al codificar entidades, etc.) no hay manera de adivinar la longitud ciertamente, pero tampoco estás obligado a escapar dichas entidades.

Son dos procesos completamente separados para preparar tu entrada, el primero es la limpieza y/o escape de caracteres especiales propios de SQL, no hay ningún motivo para escapar HTML en este paso.

El segundo paso es opcional, que es escapar dicho HTML para que no sea evaluado en el navegador, ¿entiendes la diferencia?

El navegador interpreta HTML, el servidor de base de datos no.

Entonces, ¿para que escapas el HTML al guardar en BD?

Sencillamente innecesario.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 25/09/2013, 14:19
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: ¿Bug real_escape_string?

Muchas gracias pateketrueke por tu respuesta. Resulta que he mentido cuando decia que no habia usado nada antes de real_escape_string, la verdad es que si habia en otro archivo php una llamada a la funcion htmlentities... lo cual no se en que estaria pensando cuando la puse y efectivamente ese era el error.
Seguire aprendiendo sobre el tema de seguridad con php.

Etiquetas: bug, mysqli, validar-campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:42.