Wie kann ich alle Params sanieren, die in eine Sinatra App kommen?

8

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.

    
rcd 10.12.2015, 05:18
quelle

3 Antworten

1
  

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.

    
kares 14.12.2015 11:10
quelle
0

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%     
lsu_guy 21.12.2015 02:29
quelle
0

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.

%Vor%

Die Dokumentation für escape_html finden Sie hier .

    
Richard Davis 02.10.2016 23:51
quelle

Tags und Links