2010-06-20 25 views
10

Ich suche WMD in meinem Projekt anstelle meines bestehenden RadEditors. Ich habe ein paar Posts über das Speichern und Abrufen der Daten gelesen und möchte sicherstellen, dass ich das Konzept korrekt habe, bevor ich fortfahre.Was ist der beste Weg, um WMD-Eingabe/Abschrift in SQL Server zu speichern und später anzuzeigen?

Wenn meine Forschung stimmt, hier ist, was ich tun sollte.

  1. Ich soll die Editordaten speichert zweimal (einmal als HTML und einmal als Markdown)
  2. ich soll die HTML durch ein Whitelist vor dem Speichern ausführen.
  3. Ich sollte den HTML-Code über AntiXSS auf dem Weg nach draußen (vor der Anzeige)
  4. Ich sollte die Markdown-Daten verwenden NUR, um Markdown für die Bearbeitung neu zu füllen.

Kann jemand bestätigen oder dementieren, ob dies richtig ist, und fügen Sie auch alle nützlichen Beitrag zum Thema?

Referenzen
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

Antwort

8

Ich implementiere Markdown in einer Blog-Engine, die ich schreibe (wer schreibt keine Blog-Engines?), Und ich habe auch Markdown in einer Reihe von angepassten CMS implementiert, die ich für Kunden geschrieben habe.

ich es sehr ähnlich wie die Stack-Überlauf-Team tut es:

  1. verwende ich die wmd.js als der Client-Seite-Editor.
  2. Ich benutze die MarkdownSharp serverseitige Verarbeitung.
  3. Ich benutze Jeff Atwood's Sanitize HTML, um die Verarbeitung von HTML abzudecken.

Hier sind einige Ressourcen, die über Markdown sprechen:

Fazit:

  1. ich die Post in Form speichern sie in eingereicht wurde; Es wird mit MarkdownSharp angezeigt.
  2. Ich bereinigt das HTML mit Jeff Atwood Ansatz (On-Ausgabe, nicht bei der Eingabe).
  3. Ich benutze ASP.NET MVC 'Best Practices' (ein sehr subjektiver Begriff), um mit XSS und XSRF umzugehen.
+0

Zwei Fragen ... 1) Warum Desinfektion auf Ausgabe und nicht Eingabe? und 2) Was sind diese MVC "Best Practices" ... gibt es einen Artikel zu lesen? –

+1

@rock Sie bereinigen bei der Ausgabe, weil Sie nicht wollen, was der Benutzer in die Datenbank eingeben. Durch Bereinigen der Ausgabe behalten Sie der ursprüngliche Text für den Fall, dass Sie sich dazu entschließen, das zu ändern, was Sie verwenden, um die Eingabe zu bereinigen. "Best Practices", siehe "ASP.NET MVC 1.0" von Rob Conery, Scott Hanselman, Phil Haack und Scott Guthrie. Auch Phils Blog http://haacked.com ist eine großartige Ressource für MVC-Artikel –

+0

Sie sind also nicht besorgt, wenn ein Benutzer Zeug wie Javascript oder bösartigen Mist in Ihre Datenbank eingibt? Auch nicht einmal auf Eingabe niedriger Systembereinigung über sanieren Bereinigen auf jeden Ausgang? –

0

Damit wird eines der Iden hinter Markdown ist, dass es "sicher" HTML produzieren - es gibt keine Notwendigkeit für separate Codierung sein sollte.

Generell würde ich empfehlen, "rohe" Daten in der Datenbank zu speichern, ohne sie zu transformieren oder zu bereinigen. Sie sollten immer so nah wie möglich an den Rendering-Punkt sanieren oder transformieren - es gibt größere Flexibilität (oh, plötzlich muss ich als RSS rendern. Oder JSON. Verdammt, kann ich nicht, weil ich für HTML vorformatiert) und sollte Wenn der Desinfizierer oder Renderer aktualisiert wird, sehen Sie die Auswirkungen des Updates auf alle Daten.

Ich würde sagen, speichern Sie die Abschrift Text in der Datenbank, und konvertieren Sie es dann, wenn Sie es gerendert werden möchten, mit der Abschrift-Bibliothek für diese, die in der Theorie sollte alle sichere HTML aus seiner sicheren Liste von Tags und Attributen erstellt.

+0

Das ist eine falsche Antwort. Markdown erlaubt beliebiges HTML. Es liegt an den Konsumenten von Markdown, zu bestimmen, was "gutes" HTML ist und was nicht. –

+0

Ah nicht wahr. Die Implementierung von WMD funktioniert, aber Markdown selbst soll auf seine eigenen Tags beschränkt sein und ein eigenes gültiges XHTML erzeugen. Natürlich hilft Grubers Mangel an Dokumentation oder irgendeiner Spezifikation nicht dabei. – blowdart

+0

"Also eine der Ides hinter Markdown ist, dass es" sichere "HTML produziert" - bedeutet dies, dass die WMD-Engine bereits unsicheren HTML (wie Skripte) auszieht –