У меня есть система для пользователей, чтобы смочь добавить комментарии.
Комментарии схвачены в текстовую область.
Моя проблема состоит в том, чтобы отформатировать комментарии с тегом br для замены \n
На самом деле я мог сделать что-то как этот
s.gsub(/\n/, '<br />')
Но xss защита включая в направляющих выходит из тегов br.
Таким образом, я мог сделать это
s.gsub(/\n/, '<br />').html_safe
Но затем, все теги приняты даже сценарий.... вызывающий большую проблему безопасности
Таким образом, мой вопрос: как отформатировать текст с br безопасно?
Спасибо
Править: На данный момент я имею, добавляет это
def sanitaze
self.gsub(/(<.*?>)/, '')
end
def nl2br
self.sanitaze.gsub(/\n/, '<br />').html_safe
end
Лучший способ, который я могу предложить, это использовать метод sanitize для удаления всего, кроме нужного нам тега BR.
Предположим, что у нас есть @var
с содержимым "some\ntext"
:
Попытка <%= @var.gsub(/\n/, '
не работает.
') %>
Попытка <%= h @var.gsub(/\n/, '
не работает и является небезопасной.
').htmll_safe %>
Попытка <%= sanitize(@var.gsub(/\n/, '
РАБОТАЕТ.
'), :tags => %w(br) %>
Я не тестировал это очень хорошо, но это позволяет тегу BR работать, и заменило фиктивное предупреждение скрипта, которое я добавил с белым пространством, так что, кажется, это делает свою работу. Если у кого-то еще есть идеи или кто-то может сказать, является ли это безопасным решением, пожалуйста, сделайте это.
Обновление:
Другая идея, предложенная Jose Valim:
<%= h(@var).gsub(/\n/, '
Работает
') %>