Existe-t-il un assistant Magento intégré pour échapper les données de modèle générées afin d'empêcher XSS?
Ou devrais-je simplement utiliser le PHP htmlspecialchars
ou les htmlentities
fonctions?
Existe-t-il un assistant Magento intégré pour échapper les données de modèle générées afin d'empêcher XSS?
Ou devrais-je simplement utiliser le PHP htmlspecialchars
ou les htmlentities
fonctions?
Réponses:
Il existe plusieurs méthodes d'assistance selon le contexte. Tous sont définis dans
Mage_Core_Helper_Abstract
mais aussi dansMage_Core_Block_Abstract
, vous pouvez donc les utiliser avec$this->...()
dans chaque modèle:escapeHtml()
: Il utilise en faithtmlspecialchars
les paramètres recommandés pour échapper au HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- en outre, vous pouvez spécifier une liste blanche de balises autorisées et appeler la méthode sur un tableau pour échapper à tous les éléments à la fois. Utilisez-le pour tout texte en ligne.quoteEscape()
: une version plus simple sans liste blanche ni traitement de tableau mais celle-ci échappe aux guillemets simples ainsi qu'aux guillemets doubles, utile pour le texte dans un attribut HTML .jsQuoteEscape()
: celui-ci échappe les guillemets simples avec une barre oblique inverse. Il est utilisé pour échapper aux littéraux de chaîne en JavaScript. Mais ce n'est pas sûr . (Exemple par @Xorax:)'test\\\'+alert("powned");//'
. Un échappement supplémentaire des barres obliques inverses est nécessaire. UtilisezquoteEscape()
plutôt!escapeUrl()
: Je ne sais pas pourquoi cette méthode existe, ce n'est pas des chaînes d'encodage d'URL, c'est tout simplement ancienhtmlspecialchars()
sans aucun paramètre. Ne l'utilisez pas. Déjà.Sur une note connexe, il y en a
urlEncode()
qui n'applique pas non plus le codage d'URL, mais la base64 à la place ... Ne l'utilisez pas, si vous ne savez pas exactement ce dont vous avez besoin.Oui, la dénomination est incohérente. Une fois que tous ces noms de méthodes suivaient le schéma,
somethingEscape()
mais quelqu'un a décidé de déprécierhtmlEscape()
eturlEscape()
en faveur des nouvelles méthodes et a oubliéquoteEscape()
etjsQuoteEscape()
.la source
Il suffit de le traduire
Vous devez toujours utiliser la fonction de traduction standard
Dans une instance de bloc
N'importe où ailleurs
Et utilisez-le comme vous le feriez
sprintf
avec PHPPar exemple.
Ou y échapper
Dans une instance de bloc
N'importe où ailleurs
En utilisant
Mage/Core/Helper/Abstract.php
Par exemple.
la source
Mage_Core_Block_Abstract::htmlEscape()
est obsolète à partir de Magento v 1.4.0.0-rc1 etMage_Core_Block_Abstract::escapeHtml()
doit être utilisé à la place.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Les classes
Mage_Core_Block_Abstract
et lesMage_Core_Helper_Abstract
deux utilisent la même fonctionMage_Core_Helper_Abstract::escapeHtml
et sa mise en œuvre utilise en interne la fonction PHP htmlspecialchars en plus d'implémenter une logique supplémentaire pour les tableaux avec du contenu HTML.La fonction est accessible dans toutes les classes de bloc et d'assistance via $ this et puisque la fonction est publique, vous pouvez l'utiliser via Mage :: helper ('core'), ou une autre classe d'assistance, partout ailleurs.
la source
Pour convertir espagnol:
la source