2009-08-12 8 views
6

Jakie są metody zapobiegania XSS w Ruby na Railsach? Znalazłem wiele starych dokumentów w sieci i przez większość czasu chodziło o to, aby użyć pomocnika h/html_escape, aby uniknąć zmiennej pochodzącej od użytkowników.Ruby on Rails and XSS prevention

I zrozumiałe z nowszych Dokumenty że w wersji 2.0 i powyżej jest dezynfekcji sposób, że automatycznie czyszczenia sygnał z rzekomo złośliwy wejściu. Czy to wystarczy, czy też robisz coś więcej, aby zabezpieczyć swoje aplikacje ?

Odpowiedz

10

The Ruby on Rails Security Guide jest dość dokładny na temat problemów związanych z Railsami, które należy wziąć pod uwagę przy projektowaniu zabezpieczeń witryny.

15

Metoda h jest nadal sposobem na ucieczkę z całego kodu HTML wewnątrz napisu. Powinieneś używać tej metody wszędzie, gdzie wyprowadzasz treść.

<%=h @recipe.description %> 

Takie zachowanie będzie się zmieniać w Rails 3. Nie wszystkie dane wyjściowe będą domyślnie uciekł i trzeba będzie jednoznacznie określić, aby nie uciec. W międzyczasie, jeśli często zapominasz skorzystać z tej metody, możesz sprawdzić kod Safe ERB plugin.

Metoda sanitize jest dobrym sposobem selektywnego usuwania określonych znaczników z treści. Na przykład, jeśli chcesz pozwolić użytkownikowi na pogrubienie i pochylenie ich wyników wraz z dodawaniem linków, możesz to zrobić.

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

Jak wspomniał Oliver, sprawdź numer Security Guide, aby uzyskać więcej informacji.

4

Jeśli chodzi o najlepsze praktyki, polecam następujące:

  1. zawsze używać szyny tworzą pomocników (form_for itd), jeśli napiszesz swoją formę, to otworzyć się na ataki CSRF.

  2. Podczas korzystania z funkcji h() będzie tekst uciec, jak jest napisane na stronie, nadal będziesz w końcu z XSS exploity zapisane w bazie danych. Korzystanie z wtyczki XSS_terminate powoduje utratę danych wejściowych podczas ich zapisywania.

  3. Nie zapominaj, że Twoja aplikacja działa na wielu innych aplikacjach (Rails, Apache, MySQL, twój system operacyjny), z których każdy ma swoje własne obawy dotyczące bezpieczeństwa.

2

Metoda dezynfekcji Railsów jest całkiem dobra, ale nie gwarantuje poprawności kształtu i jest dość prawdopodobne, że zostanie zaatakowana z powodu bazy instalacyjnej. Lepszą praktyką jest używanie html5lib (naprawdę najlepszego, jeśli nie najszybszego lub najbardziej rubinowego) lub Sanitize lub Loofah