Ruby on Rails: Erlaube weniger als sign '' innerhalb des Codeblocks mit dem Bereinigungshelfer

8

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.

    
steady_daddy 02.04.2016, 08:58
quelle

4 Antworten

2

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.

    
steady_daddy 12.04.2016, 04:11
quelle
4

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.

%Vor%

Wenn Sie den Inhalt ausgeben, müssen Sie nur den rohen View-Helfer verwenden, z. B.

%Vor%     
Kieran Johnson 07.04.2016 15:07
quelle
2

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%     
jack 05.04.2016 19:29
quelle
1

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.

    
Satishakumar Awati 06.04.2016 12:20
quelle