La solución más efectiva es probablemente una combinación de validación de entrada y codificación de salida.
No sé si puede depender del cliente para implementar mitigaciones XSS efectivas. Esperemos que lo hagan, pero no es algo en lo que puedas confiar.
La primera pregunta que desea hacer es qué hace con la entrada que falla la validación. ¿Elimina los caracteres incorrectos y deja que el resto de la entrada continúe? Eso hará que su aplicación sea impredecible para el usuario, lo que nunca parece una buena idea.
Otra cosa a tener en cuenta es que es posible que sus datos no siempre se muestren dentro de HTML. ¿Qué sucede si sus datos se incluyen en un documento PDF o se envían a una impresora? Esos sistemas tendrán sus propios formatos y la codificación HTML no tendrá sentido.
Este es el enfoque que recomendaría:
- Defina la entrada aceptable en términos de tamaño y conjunto de caracteres.
- Defina su comportamiento para una entrada no válida.
- Valide la entrada y rechace (recomendado) o restriegue
- Use métodos seguros para almacenar la entrada en su almacén de datos
- Al presentar los datos a los usuarios, codifíquelos correctamente para el formato (HTML, javascript, etc.)
Aquí existe el riesgo de que alguien de su equipo pueda hacer la suposición, ya que los datos están en un almacén de datos interno de que es seguro y comenzar a usar los datos sin realizar la codificación adecuada.