In un'app Rails simile, sono stato in grado di eseguire una funzione ricorsiva di controllo hash che esegue quindi il metodo clean/framment della gemma Sanitize per rimuovere qualsiasi elemento HTML dall'hash dei parametri in entrata. Ho usato un filtro before in application_controller in modo che tutto venga cancellato dall'app (è una grande app).Come posso disinfettare tutti i parametri che arrivano in un'app Sinatra?
Backstory: gli attacchi XSS erano possibili, in particolare nei browser IE, ma in realtà non vogliamo che nessuna di queste cose venga salvata nel database. Sebbene l'obiettivo finale fosse che l'output JSON non lo contenesse.
ho cercato di fare la stessa cosa in un'applicazione Sinatra (che ha qualche ActiveSupport e JRuby ActiveRecord bundle in), ma la gemma Sanitize non si fascio, perché questa particolare applicazione viene eseguita in JRuby per alcuni motivi di database. Sanitize ha bisogno di Nokogiri, che a sua volta ha bisogno di Nokogumbo, e quest'ultimo non si costruirà in questo ambiente JRuby.
Così ho provato a fare un filtro prima in app.rb usando il metodo di fuga html incorporato di Rack :: Util, ma questo fa esplodere l'app.
Esistono soluzioni alternative che posso pensare
1) Sanificazione tutti i params in arrivo in un (JRuby) Sinatra app
E se no, una minore possibilità:
2) rendere più quindi tutto il JSON che viene analizzato disinfetta i valori in detti elenchi di valori degli attributi JSON?
PS - Parte del problema qui è che un gioiello locale incluso, che gestisce molti parametri e esegue il rendering JSON, si sta rivelando impossibile eseguire il debug. Includerò Pry sia nell'app host, sia nella gemma localmente collegata, e quando provo a fare leva su Gem, non riesco a visualizzare l'hash params (che appare solo come vuoto) - sembra che sia un problema di scopo.
Qual è il problema con l'utilizzo di 'Rack :: Utils.escape_html' nel filtro precedente? – matt