Evitar que los scripts introducidos por el usuario se ejecuten en la página web

En mi aplicación, hay un cuadro de comentarios. Si alguien ingresa un comentario como

alert("hello")

entonces una alerta aparece cuando cargo esa página.

¿Hay alguna forma de prevenir esto?

Hay varias formas de abordar esto, pero como no ha mencionado qué tecnología de back-end está utilizando, es difícil dar respuestas que no sean simples.

Además, no ha mencionado si desea permitir, o denegar, la capacidad de ingresar HTML normal en el cuadro.

Método 1:

Desinfecte las entradas en el camino. Cuando acepte algo en el servidor, busque las tags de script y elimínelas.

Esto es realmente mucho más difícil de entender de lo que podría esperarse.

Método 2:

Escape de los datos en el camino de regreso al servidor. En PHP, hay una función llamada htmlentities que convertirá todo el HTML en el que representa literalmente lo que se escribió.

Las palabras aparecerán en su página.

Método 3

Lista blanca

Esto va mucho más allá de la respuesta de una sola publicación y realmente requiere conocer su sistema de back-end, pero es posible permitir algunos caracteres HTML y no permitir otros.

Esto es increíblemente difícil de entender y realmente es mejor usar un paquete de biblioteca que ha sido muy bien probado.

Debe tratar la entrada del usuario como texto simple en lugar de HTML. Al escapar correctamente de las entidades HTML, puede representar lo que parece un texto HTML válido sin que el navegador intente ejecutarlo. Esta es una buena práctica en general, tanto para el código del lado del cliente como para los valores proporcionados por el usuario que se pasan a su back-end. Los problemas que surgen de esto se conocen en general como inyección de scripts o scripts entre sitios.

Prácticamente en el lado del cliente, esto es bastante fácil ya que estás usando jQuery. Cuando actualice el DOM según la entrada del usuario, confíe en el método de text en lugar del método html . Puedes ver un ejemplo simple de la diferencia en este jsFiddle .