¿Qué hace cuando un cliente requiere la Edición de texto enriquecido en su sitio web?

15

Como todos ya sabemos, los ataques XSS son peligrosos y realmente fácil de sacar . Varios marcos facilitan la codificación de HTML, como ASP.NET MVC:

  

<%= Html.Encode("string"); %>

¿Pero qué sucede cuando su cliente requiere que puedan cargar su contenido directamente desde un documento de Microsoft Word?

Aquí está el escenario: la gente puede copiar y pegar contenido de Microsoft Word en un editor WYSIWYG (en este caso tinyMCE ), y luego esa información se publica en una página web.

El sitio web es público, pero solo los miembros de esa organización tendrán acceso para publicar información en una página web.

¿Cómo manejo estos requisitos de manera segura? Actualmente no se realiza ninguna comprobación de lo que publica el cliente (ya que solo los usuarios "confiables" pueden publicar), pero no estoy particularmente satisfecho con eso y me gustaría bloquearlo aún más en caso de que una cuenta sea hackeada.

El único método conceptual que conozco que cumple con estos requisitos es agregar etiquetas HTML a la lista blanca y dejar que pasen a través de . ¿Hay otra manera? Si no es así, ¿cuál es una forma segura de permitir que el usuario almacene las entradas en la base de datos en cualquier forma, pero solo las muestre correctamente codificadas y eliminadas de etiquetas defectuosas?

Pregunta relacionada

  

Cómo evitar las secuencias de comandos entre sitios (XSS)

    
pregunta George Stocker 18.06.2009 - 21:37

5 respuestas

8

La forma más fácil (para usted como desarrollador) es probablemente implementar una de las muchas variaciones de Markdown , por ejemplo < a href="http://aspnetresources.com/blog/markdown%5Fannounced.aspx"> Markdown.NET o, mejor aún (imho), a wmd-editor .

Entonces, sus usuarios podrán pegar HTML simple, pero nada peligroso, y podrán obtener una vista previa de los datos ingresados y corregir cualquier escrúpulo incluso antes de publicar ...

    
respondido por el Tomas Aschan 18.06.2009 - 21:52
7

La lista blanca es, de hecho, la mejor manera de prevenir ataques XSS cuando se permite que los usuarios ingresen HTML, ya sea directamente o utilizando un editor de texto enriquecido.

Sobre tus otras preguntas:

  

¿Existe un editor WYSIWYG que incluya la capacidad de incluir en la lista blanca?   la mosca?

No creo que esto pueda funcionar. Necesita el código del lado del servidor para esto y RTE se ejecuta en el cliente.

TinyMCE filtra las etiquetas si lo desea, pero como esto ocurre en el navegador, no puede confiar en él. Consulte extended_valid_elements . TinyMCE (Moxie) también sugiere listas blancas, consulte aquí .

  

Debería preocuparme por esto, ya que solo será para 'publicación privada'

Siempre debe filtrar HTML a menos que haya razones específicas para no hacerlo (muy raro). Algunas razones: a) la funcionalidad que es para los usuarios internos hoy, quizás para el público mañana b) el acceso no autorizado tendrá un impacto menor

  

es la mejor manera de dejar que lo almacenen en la base de datos de cualquier forma, pero ¿solo lo muestran correctamente codificado y despojado de etiquetas defectuosas?

Así es como lo prefiero. No me gusta cambiar la entrada del usuario antes de insertarla en la base de datos por varias razones.

    
respondido por el daremon 05.07.2009 - 03:26
-1

Estoy haciendo lo mismo. Estoy usando TinyMCE y permito pegar desde documentos de Word. Solo ciertas personas que mantienen el sitio pueden hacerlo a través de un área de administración. Esto está asegurado por la Membresía ASP.Net. Soy simple haciendo el código HTML.Encode cuando se envía al sitio público.

Puede usar el código a continuación si lo desea antes de que se incluya en la base de datos pero no está seguro de qué efecto afectivo le daría. Puede que tenga que ir con su lista blanca.

 /// <summary>
    /// Strip HTML
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string StripHTML(string str)
    {
        //Strips the HTML tags from strHTML 
        System.Text.RegularExpressions.Regex objRegExp = new System.Text.RegularExpressions.Regex("<(.|\n)+?>");

        // Replace all tags with a space, otherwise words either side 
        // of a tag might be concatenated 
        string strOutput = objRegExp.Replace(str, " ");

        // Replace all < and > with < and > 
        strOutput = strOutput.Replace("<", "<");
        strOutput = strOutput.Replace(">", ">");

        return strOutput;
    }
    
respondido por el Jon 18.06.2009 - 21:52
-1

Una opción podría ser Control de edición de HTML para .NET (que escribí).

Es un editor HTML WYSIWYM para .NET, que solo admite un subconjunto de los elementos HTML , excluyendo los elementos <script> : de esa manera actúa como una lista blanca.

Si es para uso interno (es decir, un sitio de intranet), entonces el control puede estar incrustado en una página web .

No he integrado la compatibilidad para pegar desde Word, pero sí tengo un componente que es un paso en esa dirección: un Doc para Convertidor de HTML ; así que tengo los componentes básicos que podría usar en ASP.NET para convertir un documento a HTML, mostrar el HTML en el editor, etc.

    
respondido por el ChrisW 09.09.2010 - 00:33
-2

Mi IMHO sigue confiando en tus usuarios hasta que vayas a hacerlo público.

Bueno, no hay una manera confiable de satisfacer sus necesidades. Por ejemplo, cualquier editor WYSIWYG no protege las imágenes de inserción de formularios con URL (seguimiento de uso indirecto, contenido ilegal) o texto (texto ilegal, texto mal escrito, texto mal escrito).

Mi punto de vista es que si puede confiar en sus usuarios, simplemente permita todo, simplemente advierta a los usuarios si hay MARCAS peligrosas (para evitar que se cometan errores).

Si no confías, usa una especie de marca especial (por ejemplo, Markdown).

En mi proyecto usamos tipos especiales para contenido potencialmente peligroso y métodos especiales para representar y aceptar dicho contenido. Este código tiene una marca alta en nuestro modelo de hilos y su atención es muy alta (por ejemplo, cada cambio debe ser revisado por dos programadores independientes, tenemos un conjunto de pruebas completo, etc.).

    
respondido por el Mike Chaliy 06.07.2009 - 00:11

Lea otras preguntas en las etiquetas

Comentarios Recientes

Soy un creador de contenido de código abierto para bloggers y así es como trabajo Ejemplo de escritura de contenido

< h2 class = "top"> Otros ejemplos de contenido ->

Acerca de la marca Este contenido es solo para fines informativos y promocionales y no para entidades comerciales reales o sus socios. El contenido creado en este canal o en este sitio web no es propiedad de su host designado.

Lee mas