Ich versuche, von Benutzern generierten Inhalt in Rails zu entkommen. Ich habe rough mit sanitize und rohen Helfern verwendet, um Inhalte wie diese zu filtern:
%Vor%Die Liste der genannten Tags ist im Inhalt erlaubt.
Das Problem ist, wenn ich versuche, es mit einer SQL-Abfrage wie folgt zu testen:
%Vor% innerhalb von pre und code blockiert, dass alles nach dem Bitte helfen Sie mir, einen Weg zu finden, dies zu tun.
Es scheint, als ob das ganze Problem mit der Art und Weise zusammenhängt, wie Daten in der Datenbank gespeichert werden. Zuvor war ein weniger als-Zeichen '& lt;' wurde gespeichert, wie es ist, aber jetzt wird es entkommen, so ein '& lt;' würde als <
gespeichert, was das Problem zu lösen scheint.
Ich konnte das zufällig verstehen, als ich tinymce-rails den WYSIWYG-Editor benutzte, der die '& lt; automatisch.
@ kieran-johnsons antwort hätte vielleicht dasselbe getan, aber tinymce-rails löste es, ohne ein zusätzliches Juwel zu installieren.
Danke euch allen, die sich die Zeit genommen haben, zu helfen.
Ich glaube nicht, dass dies mit der standardmäßigen Sanitize-Methode in Rails möglich ist.
Versuchen Sie stattdessen, das Sanitize-Juwel ( Ссылка )
zu verwenden %Vor% Um dies zu verwenden, um bereinigten Inhalt in der Datenbank zu speichern, fügen Sie einen before_save
-Filter zu Ihrem Modell hinzu, der den vom Benutzer generierten Inhalt bereinigt und das Ergebnis speichert, z. B.
Wenn Sie den Inhalt ausgeben, müssen Sie nur den rohen View-Helfer verwenden, z. B.
%Vor% Rails 3 hat die Eigenschaft html_safe
für jede String-Instanz hinzugefügt. Jede Zeichenfolge, die gedruckt oder in die Datenbank eingefügt wird, wird mit Escapezeichen versehen, es sei denn html_safe
ist auf "true" (vereinfacht) gesetzt. Was raw
tut, wird tatsächlich html_safe
auf true
gesetzt. Sie sollten also nur eine Zeichenfolge übergeben, die bereits sicher / maskiert ist.
Eine mögliche Lösung könnte etwa so aussehen:
strip_tags(code).html_safe
Je nach Anwendungsfall müssen Sie möglicherweise zusätzliche Prüfungen / Zeichenfolgen ersetzen.
Nach Ihrem Kommentar benötigen Sie wahrscheinlich eine etwas komplexere Version. Sie könnten versuchen, alle Zeichen zu ersetzen, die Sie zulassen möchten, die Zeichenfolge bereinigen und dann die Ersetzung rückgängig machen, um zu vermeiden, dass die Bereinigungsmethode mehr bereinigt, als Sie eigentlich möchten. Versuchen Sie etwas wie folgt:
%Vor%Dies könnte helfen, der Desinfizierer verfügt über Optionen zur Bereitstellung einer weißen Liste von Tags und Attributen, die während der Bereinigung ignoriert werden müssen
%Vor%Die weiße Liste der Tags und Attribute kann wie folgt angegeben werden:
%Vor%Die obige Anweisung erlaubt Tags: img, br und p und Attribute: src und style.
Tags und Links html escaping ruby-on-rails sanitize