2011-06-20 9 views
6

Mam stronę napisaną przez Rails3. Mój model postu ma kolumnę tekstową o nazwie "content". W panelu pocztowym formularz html ustawia kolumnę "treść" w polu tekstowym za pomocą tinymce. Na pierwszej stronie, z powodu używania tinymce, kod post.html.erb musi zostać wdrożony przy użyciu metody surowej, takiej jak <%= raw @post.content %>.Używam Rails3 z tinymce. Jak przedstawić użytkownika zamknij przeglądarkę javascript następnie wprowadź xss?

OK, teraz jeśli zamknę przeglądarkę javascript, to pole tekstowe może zostać wpisane bez tinymce, a być może użytkownik wprowadzi dowolne xss, takie jak <script>alert('xss');</script>. Mój front pokaże to pole ostrzeżenia.

Próbuję użyć sanitize(@post.content) w posts_controller, ale metoda sanitize będzie filtrować style tinymce ze sobą. Na przykład <span style='color:red;'>foo</span> stanie się <span>foo</span>.

Moje pytanie brzmi: jak odfiltrować wejście xss i zarezerwować styl tinymce w tym samym czasie?

Odpowiedz

2

Sanitizer można ustawić, aby zezwolić na atrybut stylu. W swojej config/application.rb dodają:

config.action_view.sanitized_allowed_attributes = ['style'] 

Sposób Sanitize ma również domyślne dla których właściwości CSS i słowa kluczowe to pozwoli. Zobacz sanitizer.rballowed_css_properties i allowed_css_keywords, aby uzyskać listę wartości domyślnych.

Aby dodać kilka, które nie są obecnie dopuszczone dodać go do config/application.rb:

config.action_view.sanitized_allowed_css_keywords = ['puke'] 

-

Jeśli robisz coś bardziej skomplikowanego niż to wtedy będziesz musiał napisać kilka kod. Nie polecam robić tego od zera, sprawdź, czy Loofah Gem jest dobrą biblioteką do pisania skruberów html.