Usando diferentes métodos de escape

8

Noté la clase vendor/magento/framework/Escaper.phpque contiene algunos métodos de seguridad útiles utilizados dentro de las plantillas (principalmente). Algunos de ellos son bastante comunes ( escapeHtml()), pero algunos de ellos son difíciles de encontrar.

  1. ¿Qué método y escapeXssInUrl()realmente hace?
  2. En el caso del método escapeJsQuote(), ¿cuál es el lugar donde se pueden encontrar estas citas? ¿Solo jsen línea en las plantillas?
  3. ¿Alguien tiene alguna explicación clara cuando se deben utilizar todos los métodos (ejemplos prácticos)?
  4. ¿Cuál es la diferencia entre escapeUrl()y escapeXssInUrl()si el segundo nos otorga una mayor seguridad, por qué no usar siempre el segundo en lugar de escapar solo de caracteres html?
  5. escapeQuote()¿debería usarse, por ejemplo, para hacer eco de alguna variable en una situación como esta <div value="<?php echo[aquí?] $value?>"></div>?
Bartosz Kubicki
fuente

Respuestas:

3

La mayoría de las funciones para medidas de seguridad contra ataques XSS.

escapeXssInUrl()Método Remove javascript:, vbscript:, data:palabras de URL y se utiliza como

echo $block->escapeXssInUrl($block->getUrl()) ?>"><?php echo $block->getAnchorTextHtml()

Magento 1 Puedes escapar de las comillas en javascript usando $this->jsQuoteEscape ($item->getName());Mahento 2, puedes hacer lo mismo usandoescapeJsQuote

escapeUrl() en realidad aprovecha htmlspecialchars con los parámetros recomendados para escapar de HTML: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);

Puede encontrar más información en la documentación oficial de Magento 2 .

Krishna ijjada
fuente
¿Puedes decir la diferencia entre escapeUrl()y escapeXssInUr()l? Vale la pena notar queThe upcoming release of Magento 2.2 will deprecate these functions. Please check back on this page after the 2.2 release for updated documentation on new escape functions.
Bartosz Kubicki
3

Hay una entrada útil en DevDocs sobre seguridad de plantillas: medidas de seguridad contra ataques XSS

Re escapeXssInUrl: La función escapeUrlllama escapeXssInUrlinternamente más escapeHtmldespués. También Magento utiliza escapeUrlinternamente.

Asegúrese de revisar las nuevas funciones de escape una vez que Magento 2.2. está disponible ya que vendrán nuevos:

La próxima versión de Magento 2.2 desaprobará estas funciones.

Vuelva a consultar esta página después de la versión 2.2 para obtener documentación actualizada sobre las nuevas funciones de escape.

Y también puede interesarle ver mi presentación sobre esto aquí: Manejo seguro de entradas y salidas - Conozca Magento Romania 2016

Anna Völkl
fuente
De hecho, he visto tu entrenamiento en Mage Titans Italy y quería aclarar algo de información, ¡y esa fue una de las razones de la pregunta :)! youtube.com/watch?v=TBSr5Esb-8M Eso es lo que he notado Eso es lo que también noté escapeXssInUrl(), así que ¿debería usar escapeUrl()insted? 'Reglas de validación de Eav Backedn': ¿supongo que solo se usan automáticamente y ya las estoy usando? ¿O debería implementarlos en lugares donde se agregan entradas?
Bartosz Kubicki
1
Creo que es mejor usar escapeUrlque escapeXssInUrlcomo se llama internamente: github.com/magento/magento2/blob/…
Anna Völkl
No me he dado cuenta de eso, ¡eso es correcto!
Bartosz Kubicki