Estoy usando laminas-escaper para escapar valores en html y javascript. Obtengo valores del servidor usando ajax. Así que los escapo en php usando laminas-escape. Cuando busco los datos del servidor, los almaceno en una variable js y, a veces, incluso los muestro usando html. Por ejemplo en muestra.js:
var xhttp = new XMLHttpRequest(); xhttp.open("POST", "process.php", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange=function() { if (xhttp.readyState == 4 && xhttp.status == 200) { var response = JSON.parse(xhttp.responseText); var name = response.name; document.getElementById('demo').innerHTML = name; } } xhttp.send(); La respuesta que vino del servidor estará en formato json. Por ejemplo: '{name:xxx,address:yyy}'
Mi pregunta es si solo debo usar $ escaper->escapeJs($input) para escapar js, o solo usar $ escaper->escapeHtml($input) para escapar html o usar ambos. Si tengo que usar ambos, entonces en qué orden.
Nota: Realizo un escape en el servidor y envío el resultado al navegador.
Debe escapar los datos, en el último momento posible, de una manera adecuada para lo que los está inyectando.
Si está devolviendo JSON al navegador, debe dejar que la función json_encode de PHP haga el escape por usted.
Si está devolviendo HTML al navegador, su PHP debería escapar de los datos para insertarlos en HTML.
Si está inyectando los datos en JavaScript incrustado en medio de un documento HTML y luego devolviendo el HTML al navegador, entonces su PHP debe escapar tanto para JS como para HTML.
Si está convirtiendo texto sin formato en el navegador, entonces no debería escaparlo con PHP en absoluto. Si el navegador continúa insertando el texto devuelto en el DOM con JS del lado del cliente, cualquier escape que deba hacerse es algo que debe hacer el JS del lado del cliente.
Del mismo modo, si está devolviendo JSON que el JS del lado del cliente analiza y luego inserta en el HTML, PHP debe manejar cualquier escape para el JSON y el JS del lado del cliente debe manejar cualquier escape para el HTML.