PHP htmlentities () en la entrada frente a la salida [duplicado]

Posible duplicado:
PHP htmlentities () en la entrada antes de insertar DB, en lugar de en la salida

Para una aplicación PHP que simplemente está tratando de protegerse contra XSS, ¿en qué etapa debe htmlentities() se llamará la función? ¿Debe llamarse en la entrada inicial del usuario o en cada representación de página donde se generan esos datos?

Si uso htmlentities() en la entrada del usuario, termino almacenando un poco más de datos en la base de datos. Sin embargo, a la larga, ahorro en ciclos de CPU porque solo tengo que realizar la conversión en la entrada y nunca más en la salida posterior de esos datos.

Debo señalar que no puedo ver ningún caso previsible de tener que almacenar datos de entrada HTML en mi aplicación, por lo que usar htmlentities() es puramente para la protección XSS. En el improbable caso de que alguna vez necesite el HTML sin procesar, simplemente puedo llamar html_entity_decode() retroceder htmlentities(). Además, me evita olvidar llamar htmlentities() en la representación de la página e insertando accidentalmente un exploit XSS en mi aplicación.

He jugado con la idea de usar la extensión XHP de Facebook, pero el análisis de XML genera muchos gastos generales, más de lo que me siento cómodo para mi aplicación.


Resumen: Debería usar htmlentities() en la entrada o en la salida? ¿Cuál es el enfoque general aceptado para esta situación?

preguntado el 30 de junio de 12 a las 18:06

3 Respuestas

A menos que pueda garantizar que durante la vida útil de su aplicación la entrada es , solamente va a ser alimentado a un navegador web, el asunto no está sujeto a discusión: debe usar la protección XSS en la salida porque, de lo contrario, terminará teniendo que manipular sus datos en la salida (cualquiera que sea el tipo de salida que sea) en un caso por -base de caso. Cuál es exactamente su argumento actual para aplicar la protección en la entrada.

Dado que es bastante poco probable que lo anterior sea cierto incluso ahora (y mucho menos en un futuro no especificado), en mi humilde opinión, la respuesta es obvia.

Respondido el 30 de junio de 12 a las 18:06

prefiero usarlo en la salida, que mantiene abierta la posibilidad de usar los mismos datos para ninguna versión html de las salidas.

Respondido el 30 de junio de 12 a las 18:06

No hay razones para hacerlo en la entrada.

Si desea un alto rendimiento, simplemente haga 2 campos: texto, escape_text y complete el segundo campo en la primera salida y reinícielo en la actualización.

Si va a utilizar el motor de plantillas, escapará todos los datos por usted.

Respondido el 30 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.