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 AbstractBlock
tous 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 onclick
attributs), 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' content
attribut CSS.
escapeHtmlAttr()
placeescapeUrl()
placeescapeHtmlAttr()
placeescapeHtmlAttr
et escapeHtmlAttr
n'existe pas dans 2.1.2 ... du moins pas à /vendor/magento/framework/Escaper.php
moins 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
escapeHtml
Utilisez 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>
escapeQuote
Utilisez cette fonction dans le cas des attributs HTML
Exemple:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrl
Utilisez 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>
escapeXssInUrl
Utilisez 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'))