XSS - doble comillas y barra invertida de escape

2

Actualmente estoy probando mi propio filtro XSS y no sé si lo pensé todo, así que necesito un consejo.

Digamos que mi código se ve así:

<script>
var test = {src: "test", layer: {"input": "USER INPUT", "event": "ready"}};
</script>

En este caso específico, si reemplazo \ con \ y " con \" , ¿es posible engañar a mi filtro? Por supuesto, la entrada del usuario sería donde USER INPUT está en mi código.

    
pregunta Evo_x 10.10.2017 - 20:10
fuente

1 respuesta

8
  

En este caso específico, si reemplazo \ con \ y " con \" , ¿es posible engañar a mi filtro?

Eso no es suficiente, su filtro es inseguro.

Por ejemplo, un vector de ataque XSS válido sería </script><svg onload=alert(1)> , terminando con:

<script>
var test = {src: "test", layer: {"input": "</script><svg onload=alert(1)>", "event": "ready"}};
</script>

Dado que el árbol XML (HTML) se analiza antes de evaluar cualquier JS, la etiqueta de script de cierre ( </script> ) terminará el script a pesar de estar dentro de una cadena JS.

Otro problema con su filtro son los saltos de línea. Si un atacante puede insertar un byte 0x0a , puede romper su secuencia de comandos causando un error de sintaxis (ya que una cadena entre comillas dobles no puede abarcar varias líneas):

<script>
var test = {src: "test", layer: {"input": "
", "event": "ready"}};
</script>

Si está utilizando PHP, una función de filtro conveniente para trabajar de manera segura con la entrada del usuario dentro de JS es json_encode() . De esta respuesta :

  

Con PHP simple, un enfoque común y seguro es utilizar    json_encode() como se explica aquí . Por ejemplo:

     
var foo = <?php echo json_encode($foo, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS); ?>
     

json_encode() devuelve la representación JSON de un valor, por lo tanto, es   garantizado para evaluar un objeto válido en su código JS y puede   simplemente asignarlo a una variable como se muestra. Pero no omita el adicional   banderas. Dependiendo del contexto, un atacante podría utilizar   cargas útiles como </script> para romper la etiqueta completa del script.

    
respondido por el Arminius 10.10.2017 - 20:34
fuente

Lea otras preguntas en las etiquetas