Tengo páginas web (básicamente tarjetas de visita) cuyos títulos se crean en función de las entradas de los usuarios. Planeo usar una cadena de plantilla JS simple para este propósito, en lugar de algún motor de plantilla. (Estoy usando express.js/node.js para este propósito)
response.send(` <html> <head> <title>${user_inputed_title_got_from_DB}</title> <meta property="og:title" content="${some_more_user_content}" /> </head> <body> <script> window.location.href="/business-card/${user_input_number}"; </script> </body> </html>`)¿Cómo evitar la inyección XSS de un usuario malintencionado?
Para etiquetas HTML normales, esta respuesta debería ser suficiente :
function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); }Sin embargo, su redirección en la etiqueta del script debe tratarse con un poco más de cuidado. Un enfoque común es colocar la redirección en un atributo, que se puede escapar con la función anterior:
<script data-redir="/business-card/${escapeHtml(user_input_number)}"> window.location.href = document.currentScript.dataset.redir; </script>