¿Deberían filtrarse todos los elementos de salida o solo aquellos que contienen datos editables por el usuario? [duplicar]

5

Estoy revisando una aplicación heredada que actualiza SQL para evitar inyecciones y vulnerabilidades XSS. Sé que para aplicar PHP 's htmlspecialchars() todo lo que se pasa directamente a un script y se muestra en una página.

¿Debo eliminar cada campo de la base de datos no numérica, incluso si se trata de una tabla de búsqueda generalmente no editable? Pienso que eso podría proporcionar una protección más fuerte. Usted asume que alguien ha adorado su base de datos y trabaja desde allí.

    
pregunta a coder 12.11.2014 - 15:11
fuente

2 respuestas

12

Si no hay una interfaz externa para la tabla de búsqueda, entonces probablemente no necesite limpiar los datos que salen de esas tablas por razones de seguridad. Pero podría ser más fácil limpiar siempre los datos que está presentando en lugar de agregar excepciones.

Además, si los datos en las tablas de búsqueda son seguros para la salida HTML, ¿qué sucede cuando se cambia a la salida CSV? ¿Sigue siendo seguro? Todavía se escapó correctamente?

"Defensa en profundidad". No necesariamente asumes que tu base de datos ha sido pirateada, pero ciertamente deberías estar programando de manera defensiva y no asumiendo que la base de datos no contiene caracteres, datos, etc., malos.

Le recomiendo que haga una validación de entrada en los datos que ingresan, una validación de salida en cualquier cosa que escriba, y realice cada una de ellas en cada capa del sistema (por ejemplo, servidor web del navegador, base de datos de la aplicación). / p>     

respondido por el CoverosGene 12.11.2014 - 16:34
fuente
1

La respuesta depende de lo que haya en esa columna de la tabla y de cómo se utilizará. En la mayoría de los casos, escapar de los datos antes de insertarlos en html es lo correcto.

Puede haber situaciones en las que el propósito de una tabla es almacenar fragmentos de html que un administrador puede actualizar para mostrar ciertos datos en el sitio. Por lo general, esto se llamaría un CMS. Si eso es lo que estás construyendo, entonces no querrás escapar antes de incluirlo en html. En tal situación, ser capaz de insertar un script sería una característica, no un error.

Por supuesto, en una configuración de este tipo, debe tener cuidado con lo que se pone en esa mesa. Debería ser igualmente imposible para un extraño colocar datos en esa tabla como para colocar un archivo html estático en el servidor.

Incluso cuando un administrador autorizado ingresa datos en la tabla, desinfectarlos sería una buena idea para detectar errores de sintaxis y etiquetas no balanceadas.

Lo que describí aquí es, por supuesto, solo la excepción a la regla de que todas las cadenas no constantes deben escaparse antes de incluirse en html.

Saltar el escape solo porque "sabe" que las cadenas de la base de datos nunca puede contener etiquetas html sería la pereza que volverá y lo morderá más tarde. En caso de duda, utilice el escape.

    
respondido por el kasperd 12.11.2014 - 23:58
fuente

Lea otras preguntas en las etiquetas