Я использую Rails3 с tinymce. Как предоставить пользователю закрыть браузер JavaScript, а затем ввести XSS? - PullRequest
6 голосов
/ 20 июня 2011

У меня есть сайт, написанный Rails3.В моей модели постов есть текстовый столбец с названием «контент».В панели сообщений HTML-форма устанавливает столбец «content» в поле textarea с помощью tinymce.На первой странице, из-за использования tinymce, код post.html.erb должен быть реализован с помощью необработанного метода, такого как <%= raw @post.content %>.

Хорошо, теперь, если я закрываю javascript браузера, эта текстовая область может печататься без tinymce, ивозможно пользователь введет любой xss как <script>alert('xss');</script>.Мой фронт покажет это окно с предупреждением.

Я пытаюсь sanitize(@post.content) в posts_controller, но метод sanitize будет фильтровать стиль tinymce друг с другом.Например, <span style='color:red;'>foo</span> станет <span>foo</span>.

Мой вопрос: как фильтровать ввод xss и резервировать стиль tinymce одновременно?

1 Ответ

2 голосов
/ 20 июня 2011

Можно использовать дезинфицирующее средство, чтобы разрешить атрибут стиля.В вашем config/application.rb добавьте:

config.action_view.sanitized_allowed_attributes = ['style']

Метод sanitize также имеет значения по умолчанию, для которых разрешены свойства и ключевые слова css.См. sanitizer.rb allowed_css_properties и allowed_css_keywords, чтобы получить список значений по умолчанию.

Чтобы добавить те, которые в настоящее время не разрешены, добавьте это к своему config/application.rb:

config.action_view.sanitized_allowed_css_keywords = ['puke']

-

Если вы делаете что-то более сложное, чем этотогда вам нужно будет написать код.Я не рекомендую делать это с нуля, проверьте Loofah Gem для хорошей библиотеки для написания html скрубберов.

...