所以我正在开展一个非常简单的项目。我们有以下内容参与帖子的内容:"以下是一些文字"。
现在它在视图中看起来像这样:
<%= 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的最佳替代品吗?
答案 0 :(得分:1)
对于原因并不是真正的答案,但在这种情况下使用以下方法解决了问题:
<%= sanitize @post.content %>
答案 1 :(得分:0)
html_safe
和raw
不会撤消字符串。所以
<%= raw "<script>alert('hello world!')</script>" %>
和
<%= "<script>alert('hello world!')</script>".html_safe %>
...会弹出一个“你好世界!”对话框,因此他们可以在这里编写任何脚本或将DOM元素添加到页面中,因此很危险。
不使用它们,只使用<%= %>
将转义字符串,而这正是您想要的:
<%= "<script>alert('hello world!')</script>" %>
...会在页面上显示<script>alert('hello world!')</script>
,而不是弹出警告框;因而安全。