【问题标题】:what the best way for escape html with rails 4: gsub('<', '&lt;') OR CGI.escapeHTML [closed]使用rails 4转义html的最佳方法是什么:gsub('<','<')或CGI.escapeHTML [关闭]
【发布时间】:2014-11-19 00:06:54
【问题描述】:

我想为控制器中的数据转义 html,我找到了两种方法:

text.gsub('<', '&lt;').gsub('>', '&gt;')

CGI.escapeHTML(text)

什么是最好的,为什么?

【问题讨论】:

  • 我不确定最好的方法是什么,但我会注意到第一个选项在很多情况下都是错误的。大示例是 html 属性中的任何内容,因为它不做任何引号。
  • 如果没有html解释,也没有问题。

标签: ruby-on-rails-4 html-escape-characters


【解决方案1】:

最好的办法可能就是把数据赋值给实例变量,然后在视图中输出,视图会自动处理编码:

控制器:

def something
  @foo = "<test>"
end

something.html.erb

<%= @foo %>

将输出:

&lt;test&gt;

在大多数情况下,视图会做正确的事情。

【讨论】:

  • 不,我的情况正好相反。用户发帖&lt;a onclick="alert('test')"&gt;,我想禁用 HTML 并将其保存在 bdd 中。
  • 我不认为我理解这个问题......这与 escapeHTML 方法的作用相同(我很高兴这正是 Rails 在这种情况下自动调用的方法)。如果用户输入它并且您以这种方式输出它,它将显示文本而不是带有可运行脚本的链接。
  • 我从 post 参数(由用户)获取 markdown 代码,就像在 SO 上一样,但是 XSS 攻击存在安全问题,所以我想禁用用户发送的 HTML,而不是通过转换 markdown 创建的 html到 html。这个细节并不重要,我认为我的问题很清楚。
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2020-03-14
  • 2013-12-20
相关资源
最近更新 更多