Je suis conscient que Magento 2 dispose de plusieurs méthodes pour sécuriser le modèle:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()
Mais je me demande quand utiliser chacune de ces méthodes?
Je suis conscient que Magento 2 dispose de plusieurs méthodes pour sécuriser le modèle:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()Mais je me demande quand utiliser chacune de ces méthodes?
Réponses:
Les méthodes d'échappement dans AbstractBlocktous les appels de délégué à Magento\Framework\Escaper, vous y trouverez donc un aperçu.
Regardons les méthodes publiques et leur documentation:
/**
* 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)
Cela devrait être votre méthode d'échappement par défaut pour toute sortie. La convention est que le résultat de toutes les méthodes qui ne contiennent pas "Html" doit être échappé.
( depuis 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)
Utilisez ceci pour échapper la sortie dans un attribut HTML, par exemple
title="<?php echo $block->escapeHtmlAttr($title) ?>"
Il échappera au HTML, mais aussi aux guillemets ( ")
Par défaut, il échappera également aux guillemets simples, donc cela fonctionne aussi:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
Définissez le deuxième paramètre sur false si cela n'est pas souhaité.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
Cela peut être utilisé pour générer des URL. Il appliquera l'échappement HTML par défaut et supprime également javascript:, vbscript:et data:. Si vous souhaitez empêcher des URL comme celle-ci dans les liens fournis par l'utilisateur, vous pouvez utiliser la méthode.
Jusqu'à Magento 2.1, cette fonctionnalité n'était pas incluse et vous deviez l'utiliser à la escapeXssInUrl()place. Il n'y avait aucune raison de l'utiliser escapeUrl().
Sinon, utilisez simplement les $block->escapeHtmlAttr()URL.
( depuis Magento 2.2 )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
Cela applique le codage URL aux paramètres. Pour les URL internes, vous devez toujours utiliser getUrl(), où l'encodage d'URL est déjà fait pour vous, donc cela n'est nécessaire que si vous construisez manuellement une URL externe.
( depuis Magento 2.2 )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
Encode les caractères unicode pour JavaScript, par exemple ♥devient \u2665. Utilisez-le pour échapper la sortie dans une chaîne JS . Pour Javascript en ligne (c'est-à-dire les onclickattributs), vous devez toujours appeler escapeHtmlAttr().
Notez que si vous utilisez json_encode(), il fait déjà le même échappement, dans ce cas, escapeJs()ne doit pas être utilisé.
( depuis Magento 2.2 )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
Encode les caractères unicode pour CSS (voir escapeJs()), par exemple à utiliser dans l' contentattribut CSS.
escapeHtmlAttr()placeescapeUrl()placeescapeHtmlAttr()placeescapeHtmlAttret escapeHtmlAttrn'existe pas dans 2.1.2 ... du moins pas à /vendor/magento/framework/Escaper.phpmoins qu'ils ne l'aient ajouté plus tard et ré-étiqueté magento ..
C'est pour Magento 2.0. Pour 2.1, se référer à la réponse de Fabian
escapeHtmlUtilisez cette fonction dans le cas d'une sortie de chaîne qui ne doit pas contenir de HTML.
Exemple:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuoteUtilisez cette fonction dans le cas des attributs HTML
Exemple:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrlUtilisez cette fonction en cas de sortie d'URL (sans prévention XSS - uniquement conversion de caractères)
Exemple:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrlUtilisez cette fonction en cas de sortie d'URL (avec prévention XSS - y compris la conversation de caractères)
Exemple:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()(exemple echo (int)$var)echo 'test')echo "test")__méthodeCelui-ci est utilisé à des fins de traduction. Utilisez-le lorsque vous savez qu'une chaîne peut être traduite.
Par exemple:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()? Je suis un peu fatigué de coller /* @escapeNotVerified */partout: /
__n'est pas à des fins de sécurité mais à des fins de traduction
echo $this->escapeHtml(__('Text to translate'))