Frage

Wenn Sie entwickeln eine webbasierte Anwendung, und Sie wollen reich formatierten Text von dem Benutzer zu ermöglichen, eine Entscheidung darüber machen, wie man dieser Eingabe zu ermöglichen. Viele verschiedene Markup-Sprachen erstellt wurden, weil es wohl schwieriger ist, HTML zu sanieren.

Was sind die Vor- und Nachteile der verschiedenen Auszeichnungssprachen wie:

Oder anders ausgedrückt, welche Faktoren halten Sie, wenn eine bestimmte Markup-Sprache zu verwenden wählen.

War es hilfreich?

Lösung

Markdown, BBCode, Textilien, MediaWiki Markup sind alle im Grunde das gleiche allgemeine Konzept, also würde ich wirklich nur einen Topf werfen diese in zwei Kategorien:. HTML und Nur-Text Markup

HTML

Der Deal mit HTML ist der Inhalt bereits in einer „vorzeigbar“ Form für Web-Inhalte. Das ist toll, spart Zeit der Verarbeitung, und es ist eine leicht analysieren-able Sprache. Es gibt Dutzende von Bibliotheken in so ziemlich jede Sprache HTML-Inhalte zu handhaben, konvertieren zu / von HTML in anderen Formaten, usw. Der größte Nachteil ist, dass wegen der losen Standards der frühen Web-Tage, HTML unglaublich variabel sein kann und Sie können ‚t hängt immer von sane Eingang, wenn HTML von den Benutzern zu akzeptieren. Wie bereits ausgeführt, das Aufräumen oder HTML santizing ist oft sehr schwierig, vor allem, weil es funktioniert die Art und Weise XML normale Markup Regeln einhält (das heißt nicht ordnungsgemäß geschlossene Tags sind häufig).

Plain Text Markup

Diese Kategorie häufig aus folgenden Gründen verwendet:

    Leicht
  • analysieren in mehrere Formen aus einer Hand - PDF, HTML, RTF
  • Der Inhalt wird in lesbarem Klartext gespeichert (in der Regel viel einfacher als reines HTML zu lesen), wenn zu einem späteren Zeitpunkt erforderlich, anstatt aus dem HTML zu extrahieren, um
  • Folgt bestimmten definierten Regeln, wo HTML lästige Variable und unstrukturiert sein können
  • Hier können Sie eine Teilmenge von Content-Formatierung erzwingen, als einfach in vielen Fällen besser geeignet ist für den uneingeschränkten HTML
  • Neben einer Teilmenge von HTML zu zwingen, macht es einfach eingegeben zu sanieren und Cross-Site-Scripting-Probleme usw. verhindern.
  • bedeutet, dass die „rohen“ Daten in einem abstrahierten Format zu halten, dass zu einem späteren Zeitpunkt, wenn Sie zB von HTML 4 zu XHTML Ihre Website konvertieren wollten, nur den Parsing-Code ändern musst. Mit HTML-Benutzereingabe formatiert, sind Sie jetzt stecken, die individuell alle HTML zu XHTML konvertieren, die als HTML Tidy zeigt, nicht immer eine einfache Aufgabe ist. Ebenso, wenn eine neue Markup-Sprache kommt irgendwann, oder Sie müssen zu einem alternativen Format bewegen (RTF, PDF, TeX) eine abstrahierte eingeschränkte Teilmenge von Textformatierungsoptionen macht, dass eine viel einfachere Aufgabe.

Unterm Strich ist das, was die Benutzereingabe für verwendet wird. Wenn Sie planen, um die Daten zu halten um und müssen möglicherweise Formate mischen usw. dann macht es Sinn, ein sorgfältiges abstraktes Format zu verwenden, um die Informationen zu speichern. Wenn Sie mit den Rohdaten arbeiten müssen manuell aus irgendeinem Grunde, dann Bonuspunkte, wenn das Format ist leicht lesbare Form. Wenn Sie nur die Inhalte in einer Web-Seite (oder HTML-Dokument für einen Bericht etc.) angezeigt wird, und Sie haben keine Bedenken über deren Umwandlung oder zukunftssicher es, dann ist es eine vernünftige Praxis zu speichern in HTML.

Andere Tipps

Jeff diskutiert einige Vor-und Nachteile auf codinghorror.com während sie waren in die Anfangsphase der zusammen SO setzen. Ich dachte, es war eine lohnenswerte Lektüre.

@netrox die Datenbank nicht das Problem ist, ist der Browser ausgegeben.

Die einzige Sorge ist das finale Rendering, die von der HTML vom Benutzer eingefügt gebrochen werden kann. Zum Beispiel könnte der Benutzer einen <li> Tag öffnen, aber es nie schließen, die je nachdem, wie die Seite aufgebaut ist, könnte möglicherweise das gesamte Layout brechen, die folgen. Oder ein anderes Beispiel einen <strong> Tag öffnen, ohne sie zu schließen, so dass alle übrigen Inhalte fett.

Also nicht nur erlaubt Tags müssen validiert werden, aber wie genau können Sie einige Tags, aber nicht die anderen? Da es sehr einfach ist das Parsen aller HTML-Tags zu verhindern, indem htmlspecialchars() PHP-Methode, zum Beispiel, aber wenn es um so dass einige der Tags kommt, wird man nach anderen Möglichkeiten zu suchen. Es ist die strip_tags() PHP-Funktion, die (vollständig löschen) nicht erlaubt Tags entfernt, dann aber das bedeutet die Änderung Benutzer-Inhalte in einem schlechten Weg, den Benutzer zu verhindern zum Beispiel einfachen Code zu schreiben (Code / show zu teilen, nicht-Code zu verarbeiten).

Neben dem Layout zu brechen, müssen Sie XSS-Angriffe prüfen, wie Sie Javascript in das href-Attribut eines Links eingefügt, die beispielsweise Benutzer auf eine andere Website umleiten könnte. Sehen Sie diese lange Liste der möglichen XSS-Angriffe: https://www.owasp.org/index.php/ XSS_Filter_Evasion_Cheat_Sheet

Wie Sie alle HTML-Tags sehen kann verhindert interpretiert wird, ist sehr einfach, aber nur einen Teil der Tags ist viel komplizierter zu verhindern. Um zu verstehen, dass, könnten Sie einen Blick auf die enormen nehmen „ HTML Purifier “ Rahmen, der nur Zweck ist es, einige HTML-Tags und stellen Sie sicher, zu ermöglichen, dass die ausgegebenen HTML gültig ist (dh die Seite nicht brechen) und frei von XSS-Attacken.

„Viele verschiedene Markup-Sprachen erstellt wurden, weil es wohl schwieriger ist, HTML zu sanieren.“

Wirklich? Wie ist es schwierig? Es gibt Funktionen potenziell gefährliche Attribute oder Tags zu entfernen und die HTML validieren, bevor Sie es in Datenbank oder Datei eingeben. Können Sie uns Beispiele geben, wie es ist schwierig, HTML zu sanieren?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top