ruby-on-rails “〈%=h [ ...] %>"中的“h”是什么意思?

r1zhe5dt  于 2023-02-26  发布在  Ruby
关注(0)|答案(7)|浏览(217)

当我生成一个默认的scaffold时,show.html.erb上的display标记具有

<%=h @broker.name %>

我知道<%<%=的区别。“h”是干什么的?

vbkedwbf

vbkedwbf1#

这是一种方法,它可以将诸如之类的内容转换< and >为数字字符引用,这样渲染就不会破坏你的html。

pvabu6sv

pvabu6sv2#

<%=h实际上是两件事:打开一个erb标记(<%=),调用Rails方法h来转义所有符号。
这两个调用是等效的:

<%=h person.first_name %>
<%= h(person.first_name) %>

h方法通常用于从用户输入表单中转义HTML和Javascript。

htrmnn0y

htrmnn0y3#

hERB::Util类中html_escape的方法别名。

2exbekwf

2exbekwf4#

Rack中还有一个方法可以转义HTML Rack::Utils.escape_html,以防您在Metal中想要转义一些HTML。

rmbxnbpk

rmbxnbpk5#

虽然已经很晚了,但我还是要对html_escape做进一步的解释,希望能帮助像我这样的新手理解发生了什么。Rails 3和更高版本现在会自动转义所有输出,所以需要html_escape(又名h())的情况要少得多。其中最值得注意的是,当您打算使用html_safe方法在presenter类等中构建带有html的链接时。例如:

#some_view.html.erb
<span><%= @user.name %></span>  #This is 100% fine and will be automatically escaped by Rails 3+
#Output =>  <span>Brian Kunzig</span>

#Now say we want a link with html that we need preserved!  OMG WHAT ARE DO??
<%=link_to "<span><i class='fa fa-user'></i>#{@user.name}</span>".html_safe  #DANGER!!!

上面的链接可能会导致严重的问题,并使你面临各种xss(跨站点脚本)攻击。最简单的例子是,如果用户将其名称保存为"<script>alert('omg');</script>",而你在其上使用了html_safe,这将导致任何呈现其假定名称的页面收到一个警告“omg”!这是一个主要问题。要避免此问题,请执行以下操作:

<%=link_to "<span><i class='fa fa-user'></i>#{h(@user.name)}</span>".html_safe #Winning!

通过避开用户提供的潜在污染数据,我们就可以高枕无忧了!

jtjikinw

jtjikinw6#

h只是html_escape的别名。它是一个实用的方法,通常用于从用户输入表单中转义html和javascript。它将特殊字符转换为数字字符引用,这样渲染就不会破坏你的html。
例如

<%= h "<p>Hello World</p>" %>

意志输出

<p>Hello World</p>

作为文本到查看,段落将不再被应用.它将被编码为

&lt;p&gt;Hello World&lt;/p&gt;.
xytpbqjk

xytpbqjk7#

hhtml_safe源代码的别名。
......但是什么是html_safe呢?

警告

html_escape*使 * 某些东西安全,如果它本身就危险的话。
它是做什么的?你告诉Rails:“不需要转义这个字符串--我知道我在做什么”。

不良:对此无保护:

user_input.html_safe # Danger!
永远不要将任何user_input标记为安全!

良好:

i_know_what_im_doing.html_safe

相关问题