rails如何在<%=>之间查看输出内容?和<%==>

时间:2017-11-23 09:55:15

标签: html ruby-on-rails

在我的rails application_helper.rb 文件中,有一个解析方法。在该方法内部是一个字符串变量 html ,其中包含

<form>

,其他html标签和

&nbsp;

的价值。我将在我的视图 index.html.erb 中调用解析

<%= parse() %>

解析的调用将输出 html 变量的值。

非常出乎意料的是,我注意到该视图呈现了一个浏览器根本没有处理的网页,即该网页包含了写作

<form> 

而不是渲染表格;等等所有其他标签,例如

<br>.

并且

&nbsp;

也没有被相应的空格取代。

在检查网页的源代码时,我注意到所有的&符号(例如

&nbsp;

将视图作为

发送到浏览器
&amp;

和&lt;被发送为

&lt;

并且类似于&gt;。

那么,发生了什么?放

<parse()> 

<%= %>

在将其发送到浏览器之前处理了 html 的值?为什么呢?

另一个难题是,当我将 parse()放入

时,网页呈现正常
<%== %>

(我知道

<%== %>

不是一个正确的语法,我只是错误地发现了这个拼图。)

那是怎么回事?

1 个答案:

答案 0 :(得分:2)

<%= =>出于安全原因,请转义所有代码。例如,我会在我的名字中添加一些脚本:<script>...something bad to steal your accesses, cookies, make redirects, etc</script>。当您访问我的个人资料时,将执行此脚本。此攻击称为跨站点脚本(XSS)。所以rails关心你并逃避所有这些事情以防止XSS攻击。

你要找的是用这种方式表达你的表达方式:

<%= raw(parse()) %>

或者它是别名,你提到过:

<%== parse() %>

更多详情 - http://edgeguides.rubyonrails.org/active_support_core_extensions.html#output-safety

这应该保留所有标记而不转义....但请记住......如果您有任何类型的数据,用户在parse输入,那么您将打开一个XSS漏洞在你的申请中。这不是你永远不应该做的事情。只有当你知道自己在做什么时才应该做这件事;)