Magento 2에는 템플릿을 보호하는 데 사용할 수있는 몇 가지 방법이 있습니다.
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
그러나 각 방법을 언제 사용해야하는지 궁금합니다.
Magento 2에는 템플릿을 보호하는 데 사용할 수있는 몇 가지 방법이 있습니다.
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
그러나 각 방법을 언제 사용해야하는지 궁금합니다.
답변:
AbstractBlock
모든 델리게이트 에서 이스케이프 메소드는에 대한 호출을 수행 Magento\Framework\Escaper
하므로 개요를 찾을 수 있습니다.
공개 메소드와 그 문서를 봅시다 :
/**
* Escape string for HTML context. allowedTags will not be escaped, except the following: script, img, embed,
* iframe, video, source, object, audio
*
* @param string|array $data
* @param array|null $allowedTags
* @return string|array
*/
public function escapeHtml($data, $allowedTags = null)
이것은 모든 출력에 대한 기본 이스케이프 방법이어야합니다. "Html"을 포함하지 않는 모든 메소드의 결과는 이스케이프되어야합니다.
(마 젠토 2.2 이후 )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
예를 들어 HTML 속성 내에서 출력을 이스케이프하려면이를 사용하십시오.
title="<?php echo $block->escapeHtmlAttr($title) ?>"
HTML을 이스케이프하지만 따옴표 ( "
)도
기본적으로 작은 따옴표도 이스케이프 처리되므로 다음과 같이 작동합니다.
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
원하지 않는 경우 두 번째 매개 변수를 false로 설정하십시오.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
URL을 출력하는 데 사용할 수 있습니다. 그것은 기본 HTML 이스케이프와 추가로 제거합니다 적용됩니다 javascript:
, vbscript:
와 data:
. 사용자 제공 링크에서 이와 같은 URL을 방지하려면이 방법을 사용할 수 있습니다.
Magento 2.1까지이 기능은 포함되어 있지 않으므로 escapeXssInUrl()
대신 사용해야 합니다. 전혀 사용할 이유가 없었 escapeUrl()
습니다.
그렇지 않으면 $block->escapeHtmlAttr()
URL 에만 사용하십시오 .
(마 젠토 2.2 이후 )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
URL 인코딩을 매개 변수에 적용합니다. 내부 URL의 getUrl()
경우 URL 인코딩이 이미 수행 된 경우 항상을 사용해야 하므로 수동으로 외부 URL을 생성하는 경우에만 필요합니다.
(마 젠토 2.2 이후 )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
JavaScript의 유니 코드 문자를 인코딩합니다 (예 : ♥
가 됨) \u2665
. JS 문자열 내에서 출력을 이스케이프 처리하는 데 사용하십시오 . 인라인 자바 스크립트 (예 : onclick
속성)의 경우 여전히을 호출해야합니다 escapeHtmlAttr()
.
를 사용하는 경우 json_encode()
이미 동일한 이스케이프를 수행하므로이 경우에는 escapeJs()
사용하지 않아야합니다.
(마 젠토 2.2 이후 )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
CSS의 유니 코드 문자를 인코딩합니다 ( escapeJs()
예 : content
CSS 속성에 사용).
escapeHtmlAttr()
대신 사용escapeUrl()
대신 사용escapeHtmlAttr()
대신 사용escapeHtmlAttr
그리고 escapeHtmlAttr
2.1.2에 존재하지 않습니다 ... /vendor/magento/framework/Escaper.php
그들은 나중에 추가하고 magento 태그를 다시 지정하지 않는 한 적어도 존재하지 않습니다 ..
마 젠토 2.0 용입니다. 2.1은 Fabian의 답변을 참조하십시오
escapeHtml
HTML을 포함하지 않아야하는 문자열 출력의 경우이 기능을 사용하십시오.
예:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuote
HTML 속성의 경우이 기능을 사용하십시오.
예:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrl
URL 출력의 경우이 기능을 사용하십시오 (XSS 방지없이 문자 변환 만 가능).
예:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrl
URL 출력 (XSS 방지-문자 대화 포함)의 경우이 기능을 사용하십시오.
예:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()
(예제 echo (int)$var
)echo 'test'
)echo "test"
)__
방법이것은 번역 목적으로 사용됩니다. 문자열을 번역 할 수 있다는 것을 알고있을 때 사용하십시오.
예를 들면 다음과 같습니다.
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()
도 피해야 합니까? 나는 /* @escapeNotVerified */
어디에나 붙여 넣기에 약간 지쳤다 : /
__
보안을위한 것이 아니라 번역을위한 것
echo $this->escapeHtml(__('Text to translate'))