IT TIP

"<% = h […] %>"에서 "h"의 의미는 무엇입니까?

itqueen 2020. 11. 23. 20:43
반응형

"<% = h […] %>"에서 "h"의 의미는 무엇입니까?


기본 스캐 폴드를 생성 할 때 show.html.erb의 디스플레이 태그에는

<%=h @broker.name %>

<%의 차이점을 알고 <%=있습니다. "h"는 무엇을합니까?


HTML 이스케이프. 렌더링이 HTML을 깨지 않도록 <및>와 같은 것을 숫자 참조로 변환하는 방법입니다.


<%=h실제로 두 가지 일이 발생합니다. erb 태그 ( <%=)를 열고 h모든 기호를 이스케이프하기 위해 Rails 메서드 호출합니다 .

이 두 호출은 동일합니다.

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

h메서드는 일반적으로 사용자 입력 양식에서 HTML 및 Javascript를 이스케이프하는 데 사용됩니다.


h방법의 별칭 html_escape에서 ERB :: 백분율의 클래스입니다.


Rack::Utils.escape_htmlMetal에 있고 일부 HTML을 이스케이프하려는 경우 Rack에 HTML을 이스케이프하는 방법도 있습니다 .


파티에 늦었지만 html_escape저와 같은 다른 멍청이가 무슨 일이 일어나고 있는지 이해할 수 있도록 돕기 위해 무엇 을하고 있는지에 대한 설명을 추가하고 있습니다. Rails 3 이상은 이제 모든 출력을 자동으로 이스케이프하므로 html_escape일명 h()이 필요한 상황이 훨씬 적습니다 . 가장 눈에 띄는 html_safe것은 발표자 클래스 등에서 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!

사용자가 제공 한 잠재적으로 오염 된 데이터를 피함으로써 우리는 집이 없습니다!


h는 html_escape의 별칭입니다. 사용자 입력 양식에서 html 및 javascript를 이스케이프하는 데 일반적으로 사용되는 유틸리티 방법입니다. 렌더링이 HTML을 깨지 않도록 특수 문자를 숫자 문자 참조로 변환합니다.

예를 들어

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

출력됩니다

<p>Hello World</p>

볼 텍스트로 단락이 적용되지 않습니다. 다음과 같이 인코딩됩니다.

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

참고 URL : https://stackoverflow.com/questions/296747/what-is-the-meaning-of-h-in-h

반응형