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).Wie kann ich alle Params sanieren, die in eine Sinatra App kommen?
Backstory: XSS-Angriffe waren möglich, besonders in IE-Browsern, aber wir wollen wirklich nicht, dass irgendwas davon in der Datenbank gespeichert wird. Obwohl das ultimative Ziel war, dass JSON-Ausgabe es nicht enthielt.
Ich habe versucht, das gleiche in einer Sinatra-App (die einige ActiveSupport und JRuby ActiveRecord gebündelt) zu tun, aber die Sanitize Edelstein wird nicht bündeln, weil diese bestimmte App in JRuby für einige Datenbank-Gründe ausgeführt wird. 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, wie ich denken kann,
1) Sanitizing alle eingehenden params in ein (JRuby) Sinatra App
Und wenn nicht, eine geringere Option:
2) es macht JSON, das analysiert wird, saniert also Werte in den JSON-Attribut-Wert-Listen?
PS - Ein Teil des Problems hier ist, dass ein eingeschlossenes lokales Juwel, das viele der Parameter behandelt und JSON-Rendering durchführt, sich als unmöglich erweist, zu debuggen. 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.
Was war das Problem mit 'Rack :: Utils.escape_html' im Vorher-Filter? – matt