2009-09-29 7 views
5

Ich frage mich, und war noch nicht imstande, Antworten online zu finden, wie Sie das Folgende erreichen.Rails - Escaping HTML mit der h() und exklusive spezifische Tags

Lasst uns sagen, dass ich eine Zeichenfolge haben, die Folgendes enthält:

my_string = "Hallo, ich bin ein String." (im Vorschaufenster sehe ich, dass dies tatsächlich in Fett und Kursiv Formatierung anstatt zu zeigen, die „starke“ und „i“ Tags)

Nun würde Ich mag diese sicherer machen, die html_escape mit() (oder h()) Methode/Funktion. So möchte ich verhindern, dass Benutzer Javascript und/oder Stylesheets einfügen, aber ich möchte immer noch das Wort "Hallo" in Fettdruck und das Wort "String" in Kursivschrift angezeigt.

Soweit ich sehen kann, nimmt die h() -Methode keine zusätzlichen Argumente außer dem Textstück selbst.

Gibt es eine Möglichkeit, nur bestimmte HTML-Tags zu vermeiden, anstatt alle? Wie weiße oder schwarze Auflistungsumbauten?

Beispiel, wie dies aussehen könnte, von dem, was ich versuche, wäre zu sagen:

h (my_string,: außer => [: stark,: i]) # => also im Grunde, Flucht alles, aber lass "starke" und "i" -Tags alleine, entkomme diesen nicht.

Gibt es eine Methode oder einen Weg, um dies zu erreichen?

Vielen Dank im Voraus!

Antwort

3

Ausschließen von spezifischen Tags ist eigentlich ziemlich schweres Problem. Besonders das script Tag kann in very many different ways eingefügt werden - alle zu erkennen ist sehr schwierig.

Wenn möglich, implementieren Sie dies nicht selbst.

2

Haben Sie in Betracht gezogen, RedCloth oder BlueCloth zu verwenden, anstatt HTML tatsächlich zuzulassen? Diese Methoden bieten eine Reihe von Formatierungsoptionen und verwalten das Parsen für Sie.

Bearbeiten 1: Ich fand this message, wenn Sie herum für das Entfernen von HTML mit RedCloth suchen, könnte von Nutzen sein. Außerdem zeigt Ihnen this page, wie Version 2.0.5 Ihnen ermöglicht, HTML zu entfernen. Ich kann keine neueren Informationen finden, aber eine forum post hat eine Sicherheitslücke gefunden. Hoffentlich ist es behoben worden, da das von 2006 war, aber ich kann nicht scheinen, ein RedCloth Handbuch oder Dokumentation zu finden ...

+0

RedCloth ist großartig, aber es wird _tot_ keine HTML Tags entfernen; Ich kann einfügen und es wird nicht maskiert werden. Ich bin nicht sicher, wie BlueCloth HTML streift; Ich habe es vorher nicht benutzt. – zgchurch

2

Verwenden Sie das white list Plugin oder eine modified Version davon. Es ist super! Sie können auch einen Blick auf Sanitize werfen (scheint besser, habe es nie versucht).

1

Ich würde Sanitize zum Entfernen von HTML-Tags zweitens. Es funktioniert wirklich gut. Es entfernt standardmäßig alles und Sie können eine Whitelist für die Tags festlegen, die Sie zulassen möchten.

0

Verhindern XSS-Angriffe ist ein ernstes Geschäft, folgen hrnt und denken, dass es wahrscheinlich eine Größenordnung mehr Exploits als das möglich ist aufgrund der obskuren Browser Marotten.Obwohl html_escape die Dinge ziemlich dicht macht, denke ich, dass es ein Fehler ist, irgendetwas Eigenes für diese Art von Dingen zu verwenden. Sie brauchen einfach mehr Augäpfel und Peer-Review für jede Art von Robustheitsgarantie.

Ich bin im Prozess der Bewertung sanitize vs XssTerminate im Moment. Ich bevorzuge den Xss_terminate-Ansatz für seine Robustheit - Scrubbing auf Modellebene wird ziemlich zuverlässig in einer regulären Rails-App sein, wo alle Benutzereingaben durch ActiveRecord gehen, aber Nokogiri und speziell Loofah scheinen ein bisschen leistungsfähiger, aktiver gepflegt und definitiv flexibler und Ruby-ish.

aktualisieren Ich habe implementiert nur eine Gabel von ActsAsTextiled ActsAsSanitiled genannt, die verwendet Santize jeden, ohne dass (die durch die Art und Weise zu verwenden nokogiri kürzlich aktualisiert wurde) zur Gewährleistung der Sicherheit und Wohlgeformtheits- des RedCloth Ausgangs, alle Helfer in Ihren Vorlagen.