2010-06-20 10 views
10

Estoy buscando usar WMD en mi proyecto en lugar de mi RadEditor existente. He estado leyendo algunas publicaciones sobre cómo almacenar y recuperar los datos, y quiero asegurarme de que tengo el concepto correcto antes de continuar.¿Cuál es la mejor manera de almacenar entradas/rebajas de WMD en el servidor SQL y visualizarlas más tarde?

Si mi investigación es correcta, esto es lo que debería hacer.

  1. debería almacenar los datos del editor dos veces (una vez como HTML y una vez como Markdown)
  2. que debería ejecutar el código HTML a través de un Whitelist antes de guardarla.
  3. Debo ejecutar el código HTML a través de AntiXSS en el camino de salida (antes de mostrar)
  4. Debo utilizar los datos de marcado SOLAMENTE para volver a llenar Markdown para su edición.

¿Alguien puede confirmar o negar si esto es correcto, y también añadir cualquier entrada útil sobre el tema?

Referencias
Reformat my code: Sanitize Html
StackOverflow: how do you store the markdown using wmd in asp net
StackOverflow: sanitize html before storing in the db or before rendering antixss library
StackOverflow: store html entities in database or convert when retrieved

Respuesta

8

Estoy implementando Markdown en un motor de blog que estoy escribiendo (¿quién no escribe motores de blog?), Y también he implementado Markdown en varios CMS personalizados que he escrito para clientes.

lo hago de manera muy similar a cómo el equipo de desbordamiento de pila hace:

  1. uso el wmd.js como el editor lado del cliente.
  2. Uso el procesamiento del lado del servidor MarkdownSharp.
  3. Uso Jeff Atwood's Sanitize HTML para cubrir el procesamiento de HTML.

Éstos son algunos recursos que hablan de Markdown:

En pocas palabras:

  1. almaceno el cargo en la forma que se presentó en; Se muestra usando MarkdownSharp.
  2. Sanitizo el HTML usando el enfoque de Jeff Atwood (En salida, no en entrada).
  3. Utilizo ASP.NET MVC 'mejores prácticas' (un término muy subjetivo) para tratar con XSS y XSRF.
+0

Dos preguntas ... 1) ¿Por qué desinfectar la salida y no la entrada? y 2) ¿Cuáles son estas "mejores prácticas" de MVC? ¿Hay algún artículo para leer? –

+1

@rock Se desinfecta la producción porque no se quiere destruir lo que el usuario puso en la base de datos. Al desinfectar la producción se preserva el texto original en caso de que alguna vez decida cambiar lo que está utilizando para desinfectar la entrada. Respeta las mejores prácticas, consulte "ASP.NET MVC 1.0" por Rob Conery, Scott Hanselman, Phil Haack y Scott Guthrie. Además, el blog de Phil , http://haacked.com es un gran recurso para los elementos MVC. –

+0

¿Así que no está preocupado si un usuario envía cosas como javascript o basura maliciosa a su base de datos? Además, no desinfecta una vez en la carga del sistema de entrada más bajo sobre desinfectando en cada salida? –

0

Así que uno de los idus detrás de rebajas es que se producirá html "seguro" - no debería haber ninguna necesidad de codificación por separado.

De manera más general, recomendaría almacenar datos "en bruto" en la base de datos, sin transformarlos o desinfectarlos. Siempre debe desinfectarse o transformarse lo más cerca posible del punto de representación: le da una mayor flexibilidad (oh, de repente necesito renderizarlo como RSS. O JSON. Maldita sea, no puedo porque he formateado previamente para HTML) y debería el desinfectante o procesador se actualizará, verá los efectos de la actualización en cada dato.

Yo diría almacenar el texto de rebaja en la base de datos, y luego convertirlo cuando lo desee, utilizando la biblioteca de rebajas para esto que, en teoría, debería incluir todo el HTML seguro a partir de su lista segura de etiquetas y atributos.

+0

Esa es una respuesta falsa. Markdown permite HTML arbitrario. Depende del consumidor de Markdown determinar qué es 'bueno' HTML y qué no. –

+0

Ah no es cierto. La implementación de WMD sí lo hace, pero se supone que Markdown se limita a sus propias etiquetas y produce su propio XHTML válido. Por supuesto, la falta de documentación de Gruber o cualquier especificación no ayuda con esto. – blowdart

+0

"Entonces uno de los íconos detrás de Markdown es que producirá html" seguro ": ¿esto significa que el motor de WMD ya elimina html inseguros (como scripts) –

Cuestiones relacionadas