La clase Escaper en Magento2 y Unit Testing de Templates

La Clase Escaper en Magento2 nos permitirá el filtrado de cadenas para evitar inyecciones de código.

Cómo funciona

Todo programador PHP habrá creado su propia clase para realizar tareas de filtrado y con ello llevar a cabo limpieza de cadenas, evitar inyecciones de código, etc …

Todas estas labores las realizaremos usando funciones propias del Lenguaje PHP.

Magento2 nos proporciona ya una clase para evitar que perdamos el tiempo.
Esta es la clase Escaper. Veamos como funciona y cuales son sus métodos.

Métodos y Formas de Uso

escapeHtml($data, $allowedTags)

Escapará Elementos HTML del contenido de una cadena comprobando una serie de etiquetas no permitidas.

Por defecto la clase ya tiene una serie de etiquetas no permitidas:

Opcionalmente podremos pasarle un Array con elementos que no queremos que sean escapados.

En caso de encontrar una etiqueta no permitida se registrará un Error Crítico.

Por ejemplo para limpiar el título en uno de nuestros Templates usaremos:

escapeHtmlAttr()

Esta función disponible desde Magento 2.2x nos permite escapar Atributos de Elementos HTML.

Por defecto tiene una lista de Atributos permitidos:

Por ejemplo para utilizarla escapando el valor de un elemento Input usaremos:

escapeUrl()

Este método escapa las Comillas dobles, Simples, Ampersands y Símbolos menor y mayor de una Url.

Este usa a su vez el método escapeHtml() y un nuevo método llamado escapeXssInUrl() el cual es realmente útil para evitarnos inyecciones de código usando XSS (Cross-Site Scripting) por lo que filtrará cualquier código Javascript, o similar.

Por ejemplo para escapar una Url de un enlace href usaremos:

escapeJs()

Este método disponible desde Magento 2.2x lo usaremos en el caso de querer escapar código dentro de Javascript.

Herramientas

En cualquier caso Magento nos ofrece herramientas para comprobar que nuestros Templates no son vulnerables a XSS.

Esta tarea la poedmos llevar a cabo usando la clase XssPhtmlTemplateTest.php que  podemos localizar en el directorio dev\tests\static\testsuite\Magento\Test\Php\ y necesitamos hacer un Unit Test.

Este Unit Test comprobará las llamadas echo de nuestros nuestros ficheros .phtml para así poder determinar si la salida ha sido correctamente escapada.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.