Rails3 и безопасный nl2br!

У меня есть система для пользователей, чтобы смочь добавить комментарии.

Комментарии схвачены в текстовую область.

Моя проблема состоит в том, чтобы отформатировать комментарии с тегом 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
16
задан Jon Seigel 23 May 2010 в 00:51
поделиться

1 ответ

Лучший способ, который я могу предложить, это использовать метод 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/, '
') %>
Работает

2
ответ дан 30 November 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: