使用gsub插入链接时如何避免html_safe?

时间:2019-04-22 12:08:36

标签: ruby-on-rails ruby xss

一个简化的例子是这样:

def expand_links(message)
  message = strip_tags(message)
  message = message.gsub('[register]') { link_to('register', new_user_path) }
  message = message.gsub('[login]') { link_to('login', new_sessions_path) }
  message.html_safe
end

我正在使用strip_tags,但是请确保没有XSS的机会。

那么没有strip_tagshtml_safe的话,正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

这是我在@iceman的suggestion中所做的事情:

  def expand_links(message)
    message = strip_tags(message)
    message = message.gsub('[register]') { link_to('register', new_user_path) }
    message = message.gsub('[login]') { link_to('login', new_sessions_path) }
    sanitize(message, tags: ['a'], attributes: ['href'])
  end

(BTW清理不适用于符号)

https://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html