In einer ähnlichen Rails-App konnte ich eine rekursive Hash-Prüffunktion erstellen, die dann die clean / fragment-Methode des Sanitize-Edelsteins ausführt, um alle HTML-Elemente aus dem eingehenden params-Hash zu entfernen. Ich habe im application_controller einen before-Filter verwendet, so dass alles App-weit geschrubbt wird (es ist eine große App).
Hintergrundgeschichte: XSS-Attacken waren möglich, besonders in IE-Browsern, aber wir wollen wirklich nicht, dass irgendetwas davon in der Datenbank gespeichert wird. Obwohl das ultimative Ziel war, dass JSON-Ausgabe es nicht enthielt.
Ich habe versucht, dasselbe in einer Sinatra-App zu tun (in der ActiveSupport und JRuby ActiveRecord enthalten sind), aber das Sanitize-Juwel wird nicht gebündelt, weil diese bestimmte App aus irgendwelchen Gründen in JRuby läuft. Sanitize braucht Nokogiri, das wiederum Nokogumbo benötigt, und letzteres wird einfach nicht in dieser JRuby-Umgebung gebaut.
Also habe ich versucht, einen vor-Filter in app.rb mit Rack :: Util eingebauten HTML-Escape-Methode, aber das sprengt die App.
Gibt es alternative Möglichkeiten, über die ich nachdenken kann?
1) Bereinigen aller eingehenden Params in eine (JRuby) Sinatra App
Und wenn nicht, eine geringere Option:
2) Machen Sie es so, dass JSON, das analysiert wird, Werte in den JSON-Attribut-Wert-Listen bereinigt?
PS - Ein Teil des Problems hier ist, dass ein eingeschlossenes lokales Juwel, das viele Params behandelt und JSON-Rendering ausführt, sich als nicht mehr zu debuggen erweist. Ich schließe Pry sowohl in der Host-App als auch in dem lokal verknüpften Juwel ein, und wenn ich versuche, in den Edelstein hineinzuwachsen, kann ich den params-Hash nicht anzeigen (er wird nur als leer angezeigt) - es scheint sich um ein Problem zu handeln Umfang.
Sanitize-Juwel wird nicht gebündelt, da diese bestimmte App in JRuby aus einigen Datenbankgründen ausgeführt wird. Sanitize braucht Nokogiri, was wiederum Nokogumbo benötigt, und letzteres wird einfach nicht in dieser JRuby-Umgebung gebaut.
scheint falsch zu sein, da Nokogiri in JRuby arbeitet (hat ein -java-spezifisches Juwel), probiere bundle update nokogiri
, damit Sanitize gut spielt ...
Also habe ich versucht, einen vor-Filter in app.rb mit Rack :: Util eingebauten HTML-Escape-Methode, aber das sprengt die App.
nochmal, schade. vielleicht posten Sie Details zu Ihren Edelstein-Versionen und den Fehlern, denen Sie begegnen. obwohl die bevorzugte Option, glaube ich, wäre, etwas zu bekommen, das unter MRI funktioniert, arbeitet unter JRuby - so würde ich wieder versuchen, Nokogiri zu benutzen.
Per Sinatra gibt es zwei gute Arten zu entkommen. Beide werden auf der Website erwähnt. Ссылка
1) Verwenden von Rack . Der Op erwähnte, dass es die App in die Luft jagte. Könntest du bitte mehr erklären? Um die Rack-Methode zu verwenden, können Sie das folgende Code-Snippet verwenden. Sobald der Parameter gereinigt wurde, können Sie das verwenden.
%Vor%2) Erubis Juwel verwenden . Der Edelstein ist in reinem Rubin geschrieben. Richte den Erubis-Edelstein wie folgt ein:
%Vor%Sobald dies geschehen ist, können Sie erubis verwenden, wenn Sie eine Vorlage ausgeben
%Vor% Sie können jeden der Parameter im params
-Hash durchlaufen und die escape_html
-Methode von Rack verwenden, um HTML-Elemente aus den einzelnen Parametern zu entfernen.
Die Dokumentation für escape_html
finden Sie hier .