ruby on rails - rails - ¿Cuál es el significado de "h" en "<%=h[...]%>"?
ruby on rails themes free (6)
También hay un método en Rack para escapar de HTML Rack::Utils.escape_html
en caso de que estés en Metal y quieras escapar algo de HTML.
Cuando genero un andamio predeterminado, las etiquetas de visualización en show.html.erb tienen
<%=h @broker.name %>
Sé la diferencia entre <%
y <%=
. ¿Qué es la "h"?
h es solo un alias para html_escape. Es un método de utilidad comúnmente utilizado para escapar html y javascript de los formularios de entrada del usuario. Convierte caracteres especiales en referencias de caracteres numéricos para que la representación no rompa su html.
Por ejemplo teniendo
<%= h "<p>Hello World</p>" %>
saldrá
<p>Hello World</p>
como texto para ver, el párrafo no se aplicará. se codificará como
<p>Hello World</p>.
html escapar. Es un método que convierte cosas como <y> en referencias de caracteres numéricos para que la representación no rompa su html.
<%=h
es en realidad 2 cosas que suceden. Está abriendo una etiqueta erb ( <%=
) y llamando al método Rails h
para escapar de todos los símbolos.
Estas dos llamadas son equivalentes:
<%=h person.first_name %>
<%= h(person.first_name) %>
El método h
se usa comúnmente para escapar de HTML y Javascript de los formularios de entrada del usuario.
h
es un alias de método para html_escape
de la clase ERB::Util .
html_escape
la fiesta, pero estoy agregando una explicación más de lo que html_escape
está haciendo para ayudar a otros noobs como yo a entender lo que está sucediendo. Los raíles 3 y posteriores automáticamente escapan todos los resultados ahora, por lo que hay muchas menos situaciones en las que se html_escape
aka h()
. El más notable de ellos es cuando intenta utilizar el método html_safe
al crear enlaces con html en una clase de presentador, etc. Por ejemplo:
#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!!!
El enlace anterior puede causar problemas graves y abrirlo a todo tipo de ataques xss (scripts de sitios cruzados). El ejemplo más simple, si un usuario guardó su nombre como "<script>alert(''omg'');</script>"
y usó html_safe
en él, cualquier página que represente su supuesto nombre recibirá una alerta diciendo '' Dios mio''! Este es un problema importante. Para evitar esto, haz lo siguiente:
<%=link_to "<span><i class=''fa fa-user''></i>#{h(@user.name)}</span>".html_safe #Winning!
Al escapar de los datos potencialmente contaminados suministrados por un usuario, ¡no tenemos nada en el hogar!