template rails plantillas different bootstrap ruby-on-rails ruby templates

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

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


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!