esc_html, esc_attr, esc_html_e 등의 차이점은 무엇입니까?


13

보안 담당자로부터 피드백을 받았으며 코드에서 사용자 입력을 올바르게 이스케이프 처리해야한다고 지적했습니다. 그래서 몇 가지 연구를 수행하고 탈출 기능을 발견했습니다.

그들 사이의 차이점은 무엇입니까? 언제 사용해야 esc_html()언제 esc_attr()? 그리고 _e()마지막 에이 기능들을 언제 사용해야 합니까?


1
설명서 를 읽었 습니까?
Jacob Peattie

2
그리고 예 그것은 나에게 더 :( 혼동
baldrick을

답변:


21

esc_html()HTML로 구문 분석되지 않도록 문자열을 이스케이프합니다. 예를 들어와 같은 문자 <는로 변환됩니다 &lt;. 이것은 독자와 동일하게 보이지만 출력되는 값이 <script>브라우저에서 실제 스크립트 태그로 해석되지 않음을 의미합니다.

출력되는 값에 HTML이 없어야 할 때마다이 기능을 사용하십시오.

esc_attr()class=""예를 들어 HTML 속성에서 사용하기에 안전하도록 문자열을 이스케이프합니다 . 이로 인해 값이 HTML 속성에서 벗어날 수 없습니다. 예를 들어 값이 "><script>alert();</script>있고 HTML 속성으로 출력하려고하면 현재 HTML 태그를 닫고 스크립트 태그를 엽니 다. 안전하지 않습니다. 값을 이스케이프하면 HTML 속성을 닫고 태그를 지정하고 안전하지 않은 HTML을 출력 할 수 없습니다.

HTML 속성 내에서 값을 출력 할 때이 함수를 사용하십시오.

esc_url() 유효한 URL인지 확인하기 위해 문자열을 이스케이프합니다.

href=""또는 src=""속성 내부에 값을 출력 할 때이 기능을 사용하십시오 .

esc_textarea()<textarea>요소 에서 사용하기에 안전하도록 값을 이스케이프합니다 . 이 함수를 사용하여 값을 이스케이프하면 내부에서 값이 출력되어 요소 <textarea<를 닫고 <textarea>자체 HTML을 출력하는 것을 방지합니다 .

<textarea>요소 내부에 값을 출력 할 때이 기능을 사용하십시오 .

esc_html()그리고 esc_attr()또한 끝나는 버전이 __(), _e()그리고 _x(). 번역 가능한 문자열을 출력하기위한 것입니다.

워드 프레스는 기능을 가지고 __(), _e()그리고 _x()번역 할 수있는 텍스트를 출력. __() 반환 번역 가능한 문자열, _e() 에코 번역 가능한 문자열을, 그리고 _x()주어진 상황과 번역 문자열을 반환합니다. 아마 전에 본 적이있을 것입니다.

안전한 값을 포함하도록 변환 파일을 반드시 신뢰할 수는 없으므로 변환 가능한 문자열을 출력 할 때 이러한 함수를 사용하면 출력되는 문자열이 위에서 설명한 동일한 문제를 일으킬 수 없습니다.

번역 가능한 문자열을 출력 할 때이 기능을 사용하십시오.


2
기본적으로 esc_html와 사이에는 차이가 없으며 esc_attr동일한 코드가 사용됩니다 (단지 사용되지 않는 다른 필터가 있음). wordpress.stackexchange.com/questions/264698/…
baptx

4

esc_html예를 들어 <p>태그 사이에서 html 내부에서 사용됩니다.

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr 다음과 같이 html 태그에서 속성 값을 이스케이프 처리하는 데 사용됩니다.

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

_e마지막에 적용 하면 텍스트 도메인과 함께 사용되며 자동으로 에코됩니다.

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

추가하여 _e도이 __같은 작업을 수행하는 _e당신이 변수에 저장할 수 있도록하지만 나던 에코을.


2
_e에코를위한 것이 아니라 현지화를위한 것입니다. 따라서 문자열이 함수에 전달 될 때만 사용해야하며 텍스트 도메인을 포함해야합니다. 마지막 예는 그것을 잘못 사용하고 있습니다.
Jacob Peattie

@JacobPeattie 내 나쁜, 난 업데이 트됩니다 ... 수정 수정
jrmd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.