用Rails中的content_tag替换html_safe

时间:2018-02-02 19:56:53

标签: ruby-on-rails

所以我正在开展一个非常简单的项目。我们有以下内容参与帖子的内容:"以下是一些文字"。

现在它在视图中看起来像这样:

<%= raw @post.content %>

这完全有效,但它在lint中失败并发出警告&#34;将字符串标记为html safe可能存在安全风险,更喜欢&safe; join_join&#39;或者其他Rails标记助手。

所以我开始使用:

<%= @post.content.html_safe %>

相同的lint警告。我尝试使用h @ post.content,但我得到了所有HTML crud。

然后我转到:

<%= content_tag @post.content %> 

除了它以外显示以下内容:&lt;&#34;这是一些文字&#34;&gt;

所以1.为什么要显示它们? 2.我如何摆脱它们? content_tag是raw的最佳替代品吗?

2 个答案:

答案 0 :(得分:1)

对于原因并不是真正的答案,但在这种情况下使用以下方法解决了问题:

<%= sanitize @post.content %>

答案 1 :(得分:0)

  • html_saferaw不会撤消字符串。
  • 不使用以上任何一种将ESC ESCE改为字符串。

所以

<%= raw "<script>alert('hello world!')</script>" %>

<%= "<script>alert('hello world!')</script>".html_safe %>

...会弹出一个“你好世界!”对话框,因此他们可以在这里编写任何脚本或将DOM元素添加到页面中,因此很危险。

不使用它们,只使用<%= %>将转义字符串,而这正是您想要的:

<%= "<script>alert('hello world!')</script>" %>

...会在页面上显示&lt;script&gt;alert(&#39;hello world!&#39;)&lt;/script&gt;,而不是弹出警告框;因而安全。