Salida del editor de texto enriquecido

8
  • Al tener un editor de texto enriquecido en una aplicación web, ¿cuál es la mejor manera de evitar las entidades HTML y evitar los ataques XSS pero mantener el formato ( <b> , <i> , <u> , ... etc.) ?
pregunta Awake Zoldiek 25.01.2014 - 01:06
fuente

2 respuestas

12

La Content-Security Policy o CSP le permite crear una página de HTML controlado por el usuario que no ejecuta JavaScript y, por lo tanto, no XSS.

Esto le indica al navegador que no ejecute JavaScript, que es mucho más potente que filtrar la salida, y usar ambos mejorará la seguridad. Bibliotecas de filtrado HTML como HTMLPurifer , antisammy, safehtml , todos han tenido numerosos desvíos y, por lo tanto, no deben utilizarse como el único medio de defensa. Estos son filtros muy complejos, y la complejidad es el peor enemigo de la seguridad .

    
respondido por el rook 25.01.2014 - 22:49
fuente
0

Las cosas más importantes en este caso es la seguridad. Queremos dar un texto HTML del usuario o quizás nosotros mismos, luego almacenarlo para su examen en DB, luego obtenerlo y mostrarlo en páginas web sin temor a ningún tipo de ataque y mal uso por parte de usuarios con mala intención. Me han investigado la mejor forma de hacerlo en aproximadamente 4 días y he encontrado 2 formas básicas. Permítame hablar sobre otra cosa importante que muchos IDE en el desarrollo de aplicaciones web tienen algunas reglas básicas para prevenir o advertir sobre la publicación de HTML que es la primera trinchera contra las vulnerabilidades. Tienes dos formas de pasar esto.

1) Codifique HTML y publique para que el IDE no pueda encontrar ninguna etiqueta HTML y permita que los datos se publiquen, para que pueda guardarlo y cada vez que lo obtenga, decodifíquelo y utilícelo. Podrías usar clases y extensiones preparadas o escribir las tuyas propias. El siguiente enlace contiene algunos ejemplos en el entorno .Net o js / jQuery porque soy un desarrollador .Net y seguro que existen los mismos artículos sobre otros marcos:

enlace

enlace

enlace

y esta es mi propia prueba sobre algunas funciones js / jQuery que pueden hacer eso: enlace

2) Desactivar la validación de una página o de toda la aplicación, el siguiente enlace es sobre .Net: enlace

Pero sugiero usar el atributo AllowHTML: enlace

Y pude leer mi respuesta: enlace

Primero pensé que la mejor manera es codificar HTML y publicar, guardar y luego decodificar como se puede ver de la segunda manera, especialmente en mi respuesta, pero luego pienso qué pasa si mis reglas sobre el filtrado y la visualización de etiquetas HTML. No sé si la codificación perdió algunas cosas en un HTML dado. Excepto que solo quiero almacenar html y la sección más importante de peligro es cuando lo recupero y escribo en respuesta, así que decidí usar Permitir publicación de HTML solo para campos especiales por el atributo [Permitir HTML]. Entonces obtengo HTML como usuario escrito (puedo hacer alguna limitación en las etiquetas al igual que muchos editores de HTML) y lo guardo en la base de datos. Ahora tenemos HTML y necesitamos obtenerlo y mostrarlo en la página. Este es el lugar donde vienen los atacantes. Cualquier script en HTML puede ejecutarse, Frame puede cargarse y ... entonces, ¿qué podemos hacer? Debemos desinfectar el HTML y eso significa eliminarlo de las partes peligrosas. Podríamos 1) Usar algunas herramientas preparadas para lo mismo que:

enlace enlace enlace

o 2) Utilizando un analizador de HTML, elimine todos los elementos sugeridos como peligrosos con Lista negra o Lista blanca. Algunos HTML Parser existen con contras y ventajas que puedes buscar y comparar. Llegué a Html Agility Pack en enlace y CsQuery en enlace o pagó awesomium en enlace

la comparación de Html Agility Pack VS CsQuery está en enlace

Después de todo, leí este gran artículo enlace y decidí analizar HTML y desinfectar con mis propias funciones. Por ahora uso HAP pero tengo planeado usar CsQuery lo antes posible debido a su rendimiento.

Espero esta ayuda.

    
respondido por el QMaster 26.08.2014 - 14:02
fuente

Lea otras preguntas en las etiquetas