Zabezpieczenie strony przed XSS

Zabieram się właśnie za umieszczenie serwisu w sieci i wszędzie trąbi się, że wszystko co jest wyświetlane a nie pochodzi ode mnie, powinno być wyświetlane poprzez funkcję h, która usunie htmlowe znaczki. Nie jestem pewien czy wszystkie miejsca w widokach, gdzie są wyświetlane pochodzące z zewnątrz zmienne, zabezpieczyłem tą funkcją. Po za tym nie bardzo wiem, czy tą funkcją traktować też zmienne używane w url’ach. Więc w końcu pomyślałem, że robione to jest od dupy strony i lepiej przepuścić dane przez h na wejściu i potem tym się specjalnie nie martwić. A więc do kontrolera aplikacji wrzuciłem:

[quote]before_filter :secure

HTML_ESCAPE = { ‘&’ => ‘&’, ‘"’ => ‘"’, ‘>’ => ‘>’, ‘<’ => ‘<’ }

def secure
for param in params
param = param.to_s.gsub(/[&"><]/) { |special| HTML_ESCAPE[special] }
end
end[/quote]
Jak dla mnie to wygląda szybko, łatwo i wygodnie. Co o tym myślicie? Czy według Was sprawdzi się w praktyce? Czy nie ma jakiś kruczków, które sprawią że przez to serwis będzie jakoś inaczej działał?

No cóż właśnie pokazałeś podejście “od dupy strony” :). Ok, myślisz sobie “wszyscy męczą się i próbują zwalczać te niebezpieczne znaczki przy ich wypluwaniu, a po co skoro mogę sobie je globalnie zamienić jeszcze zanim wejdą do mojego systemu?”. Tylko zauważ, że w ten sposób dane, które ktoś wysłał nie są tymi danymi, które Ty dostajesz (po przejściu przez ten filtr). Ktoś wpisuje: “wyraz” a Ty dostajesz &qout;wyraz&qout. Takie dane potem idą do bazy, podlegają walidacji i wszystko się miesza bo to nie to samo co ktoś wysłał. A jak uzupełnisz teraz pola wysłanego formularza, który nie został do końca poprawnie wypełniony? A jak zwalidujesz długość słowa (ktoś wpisz ala&kot a Ty powiesz że wyraz jest za długo bo ma… 10 znaków, a dozwolone jest 8)? A co zrobisz jak zapragniesz mieć możliwość dodawania newsów z elementami html? Zaczynasz kombinować, część przepuszczasz przez filtr, część nie. I nagle odkrywasz, że pomysł jest do dupy, a Ty nie możesz nad tym zapanować, co było już zamieniane na encje a co nie. Część wpisów w bazie masz tak, część tak.

Dalej uważasz, że Twój pomysł jest taki świetny (i nikt wcześniej na niego nie wpadł)?:slight_smile:

Dzięki za odpowiedź radarek, takiego postu właśnie oczekiwałem