¿Existe un ayudante de Magento incorporado para escapar de los datos de plantilla de salida para evitar XSS?
¿O debería usar el PHP htmlspecialchars
o las htmlentities
funciones?
¿Existe un ayudante de Magento incorporado para escapar de los datos de plantilla de salida para evitar XSS?
¿O debería usar el PHP htmlspecialchars
o las htmlentities
funciones?
Respuestas:
Existen varios métodos de ayuda según el contexto. Todos están definidos en
Mage_Core_Helper_Abstract
pero también enMage_Core_Block_Abstract
, por lo que puede usarlos$this->...()
en cada plantilla:escapeHtml()
: En realidad, aprovechahtmlspecialchars
los parámetros recomendados para escapar de HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- además, puede especificar una lista blanca de etiquetas permitidas y llamar al método en una matriz para escapar de todos los elementos a la vez. Use esto para cualquier texto en línea.quoteEscape()
: una versión más simple sin procesamiento de lista blanca y matriz, pero esta escapa a comillas simples y dobles, útil para texto dentro de un atributo HTML .jsQuoteEscape()
: este se escapa de las comillas simples con una barra diagonal inversa. Se utiliza para escapar de literales de cadena en JavaScript. Pero esto no es seguro . (Ejemplo de @Xorax:)'test\\\'+alert("powned");//'
. Es necesario escapar de las barras invertidas adicionales. Use en suquoteEscape()
lugar!escapeUrl()
: No sé por qué existe este método, es que no la codificación URL cadenas, es simplemente viejohtmlspecialchars()
sin ningún parámetro. No lo uses Siempre.En una nota relacionada, existe la
urlEncode()
que tampoco aplica la codificación URL, sino la base64 en su lugar ... No la use, si no sabe exactamente lo que necesita.Sí, el nombre es inconsistente. Una vez que todos esos nombres de métodos seguían el esquema,
somethingEscape()
pero alguien decidió desaprobarhtmlEscape()
yurlEscape()
en favor de los nuevos métodos y se olvidó dequoteEscape()
yjsQuoteEscape()
.fuente
Solo traduce
Siempre debe usar la función de traducción estándar
En una instancia de bloque
En cualquier otro lugar
Y úselo de la misma manera que lo haría
sprintf
con PHPP.ej.
O escapar
En una instancia de bloque
En cualquier otro lugar
Utilizando
Mage/Core/Helper/Abstract.php
P.ej.
fuente
Mage_Core_Block_Abstract::htmlEscape()
está en desuso a partir de Magento v 1.4.0.0-rc1 yMage_Core_Block_Abstract::escapeHtml()
debe utilizarse en su lugar.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Las clases
Mage_Core_Block_Abstract
yMage_Core_Helper_Abstract
ambas usan la misma funciónMage_Core_Helper_Abstract::escapeHtml
y su implementación usa internamente la función htmlspecialchars de PHP además de implementar alguna lógica adicional para matrices con contenido HTML.Se puede acceder a la función en todas las clases de bloque y ayuda a través de $ this y, dado que la función es pública, puede usarla a través de Mage :: helper ('core'), o alguna otra clase de ayuda, en cualquier otro lugar.
fuente
Para español convertido:
fuente