Очистить вывод в Rails
-
03-07-2019 - |
Вопрос
Какое лучшее решение для очистки выходного HTML в Rails (чтобы избежать атак XSS)?
У меня есть два варианта: плагин white_list или метод sanitize от Sanitize Helper http: //api.rubyonrails.com/classes/ActionView/Helpers/SanitizeHelper.html . Для меня до сегодняшнего дня плагин white_list работал лучше, и в прошлом Sanitize был очень глючным, но, как часть ядра, вероятно, он будет в разработке и будет поддерживаться некоторое время.
Решение
Я думаю, что здесь будет работать вспомогательный метод h:
<%= h @user.profile %>
Это исключит угловые скобки и, следовательно, нейтрализует любой встроенный JavaScript. Конечно, это также исключит любое форматирование, которое могут использовать ваши пользователи.
Если вы хотите форматировать, посмотрите на уценку.
Другие советы
Я рекомендую http://code.google.com/p/xssterminate/ . р>
Лично я думаю, что это не маленькое решение принять любую запись HTML в любом веб-приложении. Вы можете проверять теги белого / черного списка сколько угодно, но если вы не проверяете правильность вложения, кто-то может ввести ряд закрывающих тегов, например
</td></tr></span></div>
и действительно возиться с вашим макетом.
Обычно я даю людям что-то вроде Textile для ввода их разметки, так как я скорее потрачу свое время на работу над бизнес-логикой, чем на разбор HTML.
Конечно, если эта текстовая запись является более фундаментальной для вашего приложения (как, например, для стекового потока), то вам, вероятно, следует уделить больше внимания прокрутке вручную.