W podobnej aplikacji Railsowej udało mi się utworzyć rekurencyjną funkcję sprawdzania skrótu, która następnie uruchamia metodę czyszczenia/fragmentu klejnotów dezynfekcji w celu usunięcia wszystkich elementów HTML z hashów parametrów wejściowych. Użyłem filtra przed w sterowniku application_controller, więc wszystko zostanie wyszorowane w całej aplikacji (jest to duża aplikacja).Jak mogę oczyścić wszystkie parametry wchodzące w aplikację Sinatra?
Backstory: Ataki XSS były możliwe, szczególnie w przeglądarkach IE, ale tak naprawdę po prostu nie chcemy, aby jakiekolwiek z tych rzeczy były zapisywane w bazie danych. Chociaż ostatecznym celem było to, że wyjście JSON go nie zawierało.
Próbowałem zrobić to samo w aplikacji Sinatra (która ma włączone ActiveSupport i JRuby ActiveRecord), ale klej Sanitize nie będzie pakowany, ponieważ ta konkretna aplikacja działa w JRuby z pewnych przyczyn bazy danych. Sanitize potrzebuje Nokogiri, który z kolei potrzebuje Nokogumbo, a ten drugi po prostu nie zbuduje w tym środowisku JRuby.
Próbowałem więc zrobić filtr przedtem w app.rb, używając wbudowanej metody hackowania Rack :: Util, ale to wysadza w powietrze aplikację.
Czy istnieją jakieś alternatywne sposoby myślę o
1) Dezynfekcja wszystkie przychodzące params do (JRuby) Sinatra app
A jeśli nie, w mniejszym opcji:
2) czynią go więc wszystkie JSON, który jest parsowany, oczyszcza wartości z wymienionych list atrybut-wartość JSON?
PS - Część problemu polega na tym, że dołączony lokalny klejnot, który obsługuje wiele parametrów i renderuje JSON, okazuje się niemożliwy do debugowania. Dołączę Pry zarówno do aplikacji hosta, jak i lokalnie połączonego klejnotu, a kiedy spróbuję Wsiąść w Klejnot, nie mogę zobaczyć skrótu params (po prostu pokazuje się jako pusty) - wydaje się, że jest to problem zakres.
Jaki był problem z użyciem 'Rack :: Utils.escape_html' w filtrze before? – matt