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?
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 disso
escapeHtmlAttr
eescapeHtmlAttr
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:
escapeQuote
Use esta função no caso de atributos HTML
Exemplo:
escapeUrl
Use esta função no caso de uma saída de URL (sem prevenção de XSS - apenas conversão de caracteres)
Exemplo:
escapeXssInUrl
Use esta função no caso de uma saída de URL (com prevenção XSS - incluindo conversação de caracteres)
Exemplo:
O que não precisa escapar?
count()
(exemploecho (int)$var
)echo 'test'
)echo "test"
)O
__
métodoEste é usado para fins de tradução. Use-o quando souber que uma string pode ser traduzida.
Por exemplo:
fonte
__()
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çãoecho $this->escapeHtml(__('Text to translate'))