2011-05-06 6 views
5

¿Es esto 100% seguro contra XSS? Si no es así, puede proporcionar un ejemplo de texto de cadena incorrecta que me muestre por qué no lo está.XSS: Creando un objeto javascript usando el código json_encode de PHP

<html> 
    <body> 
    <script> 
     <?php 
     $bad = "some bad string. please give example text that makes the below unsafe"; 
     echo "var a = ".json_encode($bad).";"; 
     echo "var b = ".json_encode(array($bad)).";"; 
     ?> 
    </script> 
    </body> 
</html> 

Thanks. 
+2

Eso depende de lo que finalmente hagas con 'a', ¿no es así? – chustar

+0

¿De dónde viene '$ bad' en realidad? No es que importe ya que 'json_encode' solo crea [JSON] válido (http://json.org/), que es" no ejecutable ". –

+0

@kevin, 'json_encode' crea json – Neal

Respuesta

4

En resumen, es seguro. Posible XSS requeriría escaparse de la cadena javascript (") o script (</script>). Ambas cadenas se han escapado correctamente:

"   becomes \" 
</script> becomes <\/script> 

Esta es la parte sobre la inyección directa. Su aplicación debe tener en cuenta que algunos elementos de la matriz pueden faltar. Otra posibilidad es que un elemento de matriz no sea del tipo esperado (por ejemplo, una matriz en lugar de una cadena)

1

¡Definitivamente no!

No utilice json_encode para escapar de javascript.

por ejemplo:

json_encode <img src=# onerror=alert(1)>, esto va a escapar nada y salida a Brower. Este es un xss.

use htmlspecialchars en su lugar.

+0

Esta es la respuesta correcta. En resumen, la mayoría de las cosas no son seguras y esto lo demuestra. – JoeMoe1984