php - texto - string strip_tags
¿Solo ejecuta htmlspecialchars() en la salida o hay otra funcionalidad que también hace? (3)
Usualmente uso
htmlspecialchars($var, ENT_QUOTES)
en 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.
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.
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.
No debería 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.
Permite tener una revisión rápida de POR QUÉ se necesita escaparse en diferentes contextos:
Si se encuentra en una cadena delimitada por comillas, debe 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 comando, 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 forma de diferenciar los DATOS de SYNTAX, por lo tanto, escapando.
En la programación web, los casos de escape comunes son: 1. Enviar texto a HTML 2. Enviar datos a atributos HTML 3. Enviar HTML a HTML 4. Insertar datos en Javascript 5. Insertar datos en SQL 6. Insertar datos en un comando de shell
Cada uno tiene implicaciones de seguridad diferentes si se maneja incorrectamente. ¡ESTO ES REALMENTE IMPORTANTE! Repasemos esto en el contexto de PHP:
Texto en HTML: htmlspecialchars (...)
Datos en atributos HTML htmlspecialchars (..., ENT_QUOTES)
HTML en HTML Utilice una biblioteca como HTMLPurifier para ASEGURAR que solo estén presentes las etiquetas válidas.
Datos en Javascript Prefiero
json_encode
. Si lo ubica en un atributo, aún necesita usar el # 2, comoInsertar 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 olvides las comillas ALREDEDOR de la llamada addslashes ():
"INSERT INTO table1 SET field1 = ''". addslashes ($ data). "''"
Datos en la línea de comando escapeshellarg () y escapeshellcmd () - lea el manual
- ¡Tómese esto en serio y eliminará el 95% * de los riesgos comunes de seguridad web! (* una adivinanza)