Estou ciente de que o Magento 2 tem vários métodos disponíveis para proteger o modelo:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
Mas eu estou querendo saber quando usar cada um desses métodos?
Estou ciente de que o Magento 2 tem vários métodos disponíveis para proteger o modelo:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
Mas eu estou querendo saber quando usar cada um desses métodos?
Respostas:
Os métodos de escape em AbstractBlock
todos os delegados chamam para Magento\Framework\Escaper
que você encontre uma visão geral lá.
Vejamos os métodos públicos e sua documentação:
/**
* 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)
Esse deve ser o seu método de escape padrão para qualquer saída. A convenção é que o resultado de todos os métodos que não contêm "Html" deve ser escapado.
( desde Magento 2.2 )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
Use isso para escapar à saída dentro de um atributo HTML, por exemplo
title="<?php echo $block->escapeHtmlAttr($title) ?>"
Ele escapará do HTML, mas também aspas ( "
)
Por padrão, ele também escapará de aspas simples, então isso também funciona:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
Defina o segundo parâmetro como false se isso não for desejado.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
Isso pode ser usado para gerar URLs. Ele aplicará o escape padrão do HTML e removerá adicionalmente javascript:
, vbscript:
e data:
. Se você deseja impedir URLs como este nos links fornecidos pelo usuário, pode usar o método
Até o Magento 2.1, esse recurso não estava incluído e você precisava usá-lo escapeXssInUrl()
. Não havia motivo para usar escapeUrl()
.
Caso contrário, use apenas $block->escapeHtmlAttr()
para URLs.
( desde Magento 2.2 )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
Isso aplica a codificação de URL aos parâmetros. Para URLs internas, você sempre deve usar getUrl()
, onde a codificação de URL já foi feita para você, portanto isso só é necessário se você construir manualmente uma URL externa.
( desde Magento 2.2 )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
Codifica caracteres unicode para JavaScript, por exemplo, ♥
torna-se \u2665
. Use-o para escapar da saída dentro de uma sequência JS . Para Javascript embutido (ou seja, onclick
atributos), você ainda precisa ligar escapeHtmlAttr()
.
Observe que, se você usar json_encode()
, ele já faz o mesmo escape, neste caso, escapeJs()
não deve ser usado.
( desde Magento 2.2 )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
Codifica caracteres unicode para CSS (consulte escapeJs()
), por exemplo, para ser usado no content
atributo CSS.
escapeHtmlAttr()
vez dissoescapeUrl()
vez dissoescapeHtmlAttr()
vez dissoescapeHtmlAttr
e escapeHtmlAttr
não existe no 2.1.2 ... pelo menos não /vendor/magento/framework/Escaper.php
a menos que você adicionou-lo mais tarde e magento re-marcado ..
Isto é para o Magento 2.0. Para 2.1, consulte a resposta de Fabian
escapeHtml
Use esta função no caso de uma saída de sequência que não deve conter HTML.
Exemplo:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuote
Use esta função no caso de atributos HTML
Exemplo:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrl
Use esta função no caso de uma saída de URL (sem prevenção de XSS - apenas conversão de caracteres)
Exemplo:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrl
Use esta função no caso de uma saída de URL (com prevenção XSS - incluindo conversação de caracteres)
Exemplo:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()
(exemplo echo (int)$var
)echo 'test'
)echo "test"
)__
métodoEste é usado para fins de tradução. Use-o quando souber que uma string pode ser traduzida.
Por exemplo:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()
também? Estou um pouco cansado de colar em /* @escapeNotVerified */
todos os lugares: /
__
Não é para fins de segurança, mas para fins de tradução
echo $this->escapeHtml(__('Text to translate'))