2010-06-16 20 views
13

Chcę umożliwić użytkownikom aplikacji internetowej, którą buduję, napisanie własnego CSS w celu dostosowania ich strony profilu.Dezynfekcja CSS w Railsach

Jednak zdaję sobie sprawę z tego otworu na wiele zagrożeń bezpieczeństwa, tj background: url ('javascript: alert ("Got cookies!" + Document.cookies')

Dlatego szukam a. rozwiązanie do dezynfekcji CSS przy jednoczesnym zachowaniu jak największej możliwej funkcjonalności CSS dla moich użytkowników:

Moje pytania, jeśli ktokolwiek wie o klejnocie lub wtyczce do tego rozwiązania? Wyodrębniłem już moje mózgi, więc wszelkie wskazówki byłby naprawdę doceniony!

+0

po prostu ciekawy, jak się masz przechowywania CSS? w bazie danych lub jako plik dla każdego użytkownika? –

+0

Wow .. szalony, że można wykonać javascript z CSS w ten sposób. Nie mam pojęcia, jak to rozwiązać - przepraszam! – zaius

+0

Shripad K: Przechowam CSS w bazie danych. zaius: Tak! Sprawdź tę stronę: http://guides.rubyonrails.org/security.html#css-injection – Erik

Odpowiedz

7

Szyny mają wbudowany środek dezynfekujący css

Zobacz http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize_css i jego rodzica http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize

> ActionController::Base.helpers.sanitize_css('background:#fff') 
=> "background: #fff;" 
> ActionController::Base.helpers.sanitize_css('javascript:alert("garr");') 
=> "" 
+0

OK, dziękuję! Ale jak rozumiem, ta metoda służy tylko do odkażenia atrybutu stylu na elemencie HTML. Nie można go użyć do odkażenia całego arkusza stylów ...? – Erik

+0

Powinno być tak samo - jedna linia lub stos linii ... to nie ma znaczenia. – mylescarrick

+1

Nie obsługuje całego arkusza stylów. – Habax

1

Jest też jakiś kod zwany css_file_sanitize: https://github.com/courtenay/css_file_sanitize

Porównując go do szyn polecenie sanitize Uważam, że zarówno używać wyrażeń regularnych rozebrać się niepożądane fragmenty CSS .

Oto źródło css_file_sanitize: https://github.com/courtenay/css_file_sanitize/blob/master/lib/css_sanitize.rb

Oto źródło Rails sanitize: https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb