underscore template backbonejs javascript backbone.js escaping xss

javascript - template - Backbone.js y XSS/HTML escapando



backbonejs github (2)

El ejemplo de Todo no es el ejemplo más limpio. Utiliza el motor de plantillas de subrayado , de la siguiente manera:

<input class="edit" type="text" value="<%= title %>" />

Para escapar correctamente del HTML, use <%- vez de <%= :

<input class="edit" type="text" value="<%- title %>" />

Estoy construyendo una aplicación Backbone.js y me pregunto cuál es la mejor manera de lidiar con XSS, respectivamente, el escape de HTML cuando se usa Backbone.js.

En la aplicación básica de ejemplo Todos de la documentación oficial de Backbone.js, no se escapan los datos. Como estos datos se usan en la plantilla para representar las entradas de tareas pendientes, es posible ejecutar el código JavaScript ingresando el siguiente texto (puede ser reproducido en el enlace de arriba):

"><script>alert(''xss'');</script>

Cuando se utiliza un servidor REST como back-end de almacenamiento, este XSS es persistente para cada usuario.

¿Cómo resuelves este problema?

Mi idea es escapar de los datos en el servidor, por lo que los datos devueltos luego son seguros para ser utilizados en una plantilla. ¿Tengo que usar siempre wait: true para asegurarme de que no se procesen los datos sin guardar? Y para editar, agregue otro atributo con los datos no escaneados, que luego se pueden usar para rellenar el campo de texto con .val() ?

¿O no hace nada de esto y escapa de los datos en el cliente, antes de representar la plantilla?


La forma estándar en backbone es usar model.escape(attribute) .

Desde backbone docs backbonejs.org/#Model-escape :

"Similar a get, pero devuelve la versión escapada en HTML del atributo de un modelo. Si está interpolando datos del modelo en HTML, el uso de escape para recuperar los atributos evitará los ataques XSS".

var hacker = new Backbone.Model({ name: "<script>alert(''xss'')</script>" }); alert(hacker.escape(''name''));