2009-02-08 7 views
5

Al enviar la entrada del usuario, ¿solo utiliza htmlspecialchars() o hay funciones/acciones/métodos que también ejecuta? Estoy buscando algo que también trate con XSS.¿Solo ejecuta htmlspecialchars() en la salida o hay alguna otra funcionalidad que también haga?

Me pregunto si debería escribir una función que escapa de la entrada del usuario en la salida o simplemente usar htmlspecialchars(). Estoy buscando casos genéricos, no los casos específicos que se pueden tratar individualmente.

Respuesta

10

lo general el uso

htmlspecialchars($var, ENT_QUOTES) 

en los campos de entrada. Creé un método que hace esto porque lo uso mucho y hace que el código sea más corto y más legible.

+1

¿Por qué el uso de 'ENT_QUOTES' (en lugar de' ENT_NOQUOTES' como lo sugerí)? –

+2

Uso ENT_QUOTES para campos de entrada con datos de la base de datos. Entonces, si los datos tienen 'o' no se cerrará la variable de valor dentro de la etiqueta de entrada. –

+1

Ólafur: sí, en los campos de entrada (o más en general atributos) tiene cierto sentido. ;-) –

7

Deja para tener una rápida revisión de por qué se necesita escape en diferentes contextos:

Si se encuentra en una cadena delimitada cita, tiene que ser capaz de escapar de las comillas. Si está en xml, necesita separar "contenido" de "marcado" Si está en SQL, debe separar "comandos" de "datos" Si se encuentra en la línea de comandos, debe separar "comandos" de "datos"

Este es un aspecto realmente básico de la informática en general. Debido a que la sintaxis que delimita los datos puede ocurrir EN LOS DATOS, debe haber una manera de diferenciar los DATOS de SYNTAX, por lo tanto, escapando.

En la programación web, los casos que escapan comunes son: 1. Salida de texto en HTML 2. Transferir los datos en atributos HTML 3. Salida de HTML en HTML 4. Insertar datos en Javascript 5. Insertando datos en SQL 6. Insertar datos en un comando de shell

Cada uno tiene implicaciones de seguridad diferentes si se manejan incorrectamente. ¡ESTO ES REALMENTE IMPORTANTE! Vamos a revisar esto en el contexto de PHP:

  1. texto en HTML: htmlspecialchars (...)

  2. de datos en HTML atributos htmlspecialchars (..., ENT_QUOTES)

  3. HTML en HTML Utilice una biblioteca como HTMLPurifier para ASEGURAR que solo estén presentes las etiquetas válidas.

  4. Datos en Javascript Prefiero json_encode. Si lo está colocando en un atributo, aún necesita usar el # 2, como

  5. Insertar datos en SQL Cada controlador tiene una función de escape() de algún tipo. Es lo mejor Si está ejecutando un juego de caracteres latin1 normal, addslashes (...) es adecuado. No olvide las citas ALREDEDOR de la llamada addslashes():

    "INSERT INTO table1 SET field1 = '". addslashes ($ data)."'"

  6. datos en la línea de comandos ( escapeshellarg) y escapeshellcmd() - Leer el manual

- tomar estos a corazón, y eliminará el 95% * de común riesgos de seguridad web! (* una conjetura)

-5

No debe estar limpiando el texto en la salida, debería ocurrir en la entrada. Yo uso un filtro que filtra toda la entrada a la aplicación. Es configurable para que pueda permitir etiquetas/datos específicos cuando sea necesario (por ejemplo, para un editor wysiwig).

Debe hacer tan poco procesamiento de texto en la salida como sea posible para garantizar la velocidad. Procesarlo una vez crea mucha menos tensión y luego procesarlo 500,000 veces.

+0

Lo haría Estoy de acuerdo con usted, excepto que, en general, la teoría es aceptar solo la entrada que sea válida, pero aún así debe escapar de la salida. El problema aparece cuando alguien ingresa una cita en su nombre de usuario, usted escapa t para HTML se vuelve inútil para la generación de PDF. –

+0

Aquí está la cosa, si está programando esto para la web, cuántas veces se verá en el verso web exportado como PDF. Supongo que no está generando PDF sobre la marcha en cada vista. Así que mi punto es sólido, en el caso de una exportación PHP, simplemente puede invertir el resultado. – Syntax

+0

Bueno, la regla sigue vigente es que desea almacenar los datos de los usuarios lo más exactos posible en la base de datos y en la salida modificarlos según sea necesario. Trabajo en algunos sitios donde el 50% de web/HTML y el 50% es PDF/Excel/etc. –

Cuestiones relacionadas