2016-07-20 17 views
0

Ich habe ein Formular, wo Benutzer ihre eigenen Eingabe mit HTML stylen können. Ich möchte diese Eingabe auf der Serverseite mit PHP säubern. Ich möchte jedoch sicherstellen, dass alle Eingaben sicher sind und zu dem passen, was ich möchte. Ich habe bereits XSS-Schutz, also ist dies nicht über das Entfernen von Skripts.Entfernen Sie bestimmte Tags von HTML-Eingabe mit PHP

Wenn die Benutzereingabe liefert, mag ich Tags entfernen andere als p, img, a, hr, br, tbody, tr, td, pre, ul, ol, li und span (grundsätzlich alle Textformatierung andere als divs). Ich möchte alle Attribute außer href für <a>, src für und style für <p> entfernen. Für <p> Stil würde ich nur die folgenden Attribute wie zu erhalten:

  • color
  • background-color
  • line-height
  • Alles, was mit text-

Zusätzlich beginnt, möchte ich in der Lage sein, um den Text auf eine bestimmte Länge zu beschneiden und dabei End-Tags beizubehalten und sicherzustellen, dass jedes öffnende Tag auch ein Closing hat Etikett.

Zum Beispiel, wie verarbeitet der Stack Overflow-Editor Eingaben, bevor er sie speichert und dem Benutzer anzeigt?

Danke.

+0

Ich kenne den Code hinter dem Editor von SO nicht. Wenn Sie uns Ihren Code zeigen, können wir Ihnen vielleicht helfen, ihn zu verbessern. – BeetleJuice

+0

Mein Code stammt aus dem Summernote-Editor. Um zu verdeutlichen, geht es um das Backend. –

+0

Verwenden Sie CKEditor dafür? – eronax59

Antwort

2

Ich verwende http://htmlpurifier.org/, um HTML-Eingabe zu reinigen. Sie können die zulässigen Tags, Attribute und Stile definieren. Ich habe den Code aus meinem Projekt als Beispiel hinzugefügt.

$configuration = HTMLPurifier_Config::createDefault(); 
    $configuration->set('Attr.EnableID', true); 
    $configuration->set('AutoFormat.RemoveEmpty', true); 
    $configuration->set('AutoFormat.RemoveEmpty.RemoveNbsp', true); 
    $configuration->set('HTML.AllowedAttributes', array('span.style', '*.id', '*.src', 'a.href', 'table.style', 'img.style', 'td.colspan', 'td.rowspan', 'td.style')); 
    $styles = array('margin-left', 'color', 'background-color', 'text-decoration', 'font-weight', 'font-style', 'border', 'border-collapse', 'height'); 
    $configuration->set('CSS.AllowedProperties', $styles); 
    $htmlPurifier = new HTMLPurifier($configuration); 
    return $htmlPurifier->purify($html); 
+0

Ehrfürchtig. Ich habe das tatsächlich benutzt, um Skripte mit der Autokonfiguration zu löschen, aber ich wusste nicht, dass es das alles machen könnte. Vielen Dank. –