8
votes

Comment puis-je assainir tous les paramètres entrants dans une application SINATRA?

Dans une application similaire Rails, j'ai pu effectuer une fonction de vérification de hachage récursive qui exécute ensuite la méthode de nettoyage / fragment de Danitize GEM pour supprimer tous les éléments HTML du hachage de paramètres entrants. J'ai utilisé un filtre avant de filtrer dans l'application_Controller afin que tout soit nettoyé en application (c'est une grande application).

Backstory: Les attaques XSS étaient possibles, en particulier dans les navigateurs IE, mais nous ne voulons vraiment pas que aucune de ces choses soit sauvée dans la base de données de toute façon. Bien que l'objectif ultime était que la sortie JSON ne l'a pas contentée.

J'ai essayé de faire la même chose dans une application Sinatra (qui a un peu deutilisateur et Jruby Aciverecord groupé dans), mais le gemme sanitize ne va pas incliner, car cette application particulière s'exécute à Jruby pour des raisons de base de données. Sanitize Besoints Nokogiri, qui nécessite à son tour Nokogumbo, et ce dernier ne construira tout simplement pas dans cet environnement Jruby.

J'ai donc essayé de faire un filtre avant App.rb à l'aide de la méthode HTML HTML intégrée à l'UTIL, mais qui souffle l'application.

Y a-t-il des moyens alternatifs que je peux penser à

1) assainir tous les paramètres entrants dans une application (Jruby) Sinatra

et sinon, une option moindre:

2) Faites-le donc que tout JSON soit analysé des valeurs dans lesdits listes de valeur d'attribut JSON?

PS - une partie de la question Voici qu'un gemme local inclus, qui gère beaucoup de paramètres et que JSON RENDING, se révèle impossible de déboguer. Je vais inclure la pry dans l'application hôte et la gemme liée localement, et lorsque j'essaie de prie dans la gemme, je ne peux pas voir les paramètres hachage (cela montre juste aussi vide) - il semble être un problème de Portée.


1 commentaires

Quel était le problème avec l'utilisation de rack :: utils.escape_html dans le filtre avant?


3 Réponses :


1
votes

Sanitize GEM ne va pas grouper, car cette application particulière s'exécute dans Jruby pour des raisons de base de données. Sanitize Besoints Nokogiri, qui nécessite à son tour Nokogumbo, et ce dernier ne construira tout simplement pas dans cet environnement Jruby.

semble tort que Nokogiri fonctionne dans Jruby (GEM spécifique AJAVA), essayez un Mise à jour Nokogiri afin que vous sanitisez à jouer bien ...

J'ai donc essayé de faire un filtre avant App.rb à l'aide de la méthode HTML HTML intégrée à l'UTIL, mais qui souffle l'application.

Encore une fois, dommage. Peut-être publier des détails sur vos versions GEM et les échecs que vous avez rencontrés. Bien que l'option privilégiée, je pense que ce serait d'obtenir quelque chose qui a travaillé sous l'IRM travaillant sous Jruby - je voudrais donc essayer à nouveau d'utiliser Nokogiri.


2 commentaires

J'ai pu obtenir Nokogiri de construire avec Jruby, mais le Gemspec de Sanitize Gem a également une dépendance spécifique sur Nokogumbo, définie à la version 1.4.1, et cela ne construirait pas avec Jruby, de sorte que la gemme sanitize semblait ne pas manquer de être une option.


Vous auriez dû être plus précis dans la question: Sanitize Besoin Nokogiri, qui a besoin Nokogumbo que j'ai mal compris. Les options sont donc laissées dans la construction d'une interface compatible Nokogumbo E.G. Utilisation d'un "natif" Parser Java HTML (écrire une extension Jruby ou utiliser Jruby's Java Scripting Integration) ou migrer vers une bibliothèque différente lorsque vous avez tenté. Les deux ne sont pas vraiment pour une réponse aussi, mais plus de la session de codage du monde réel :)



0
votes

par sinatra, il y a 2 bonnes façons d'échapper. Les deux sont mentionnés sur le site Web. http://www.sinatrarb.com/faq.html#escape_html

1) Utilisation de rack fort>. L'OP a indiqué qu'il soufflait de l'application. Pourriez-vous s'il vous plaît expliquer plus? Pendant ce temps, utiliser la méthode de rack, vous pouvez utiliser l'extrait de code suivant. Une fois que le paramètre a été nettoyé, vous pouvez l'utiliser. P>

erb :index


0 commentaires

0
votes

Vous pouvez itérer via chacun des paramètres de la paramètres code> HASH et utilisez la méthode ESPASS_HTML code> pour échapper aux éléments HTML contenus dans chaque paramètre.

params.each do |p, v|
  params[p] = Rack::Utils.escape_html(v)
end


0 commentaires