2012-09-25 30 views
25

我正在构建一个Backbone.js应用程序,并且想知道在使用Backbone.js时处理XSS和HTML转义的最佳方式是什么。Backbone.js和XSS/HTML转义

在官方Backbone.js文档的基本​​中,数据不会被转义。由于该数据在模板用于呈现待办事项条目,也能够通过输入以下文本执行JavaScript代码(可以在上面的链接被再现):

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

当使用REST服务器作为存储后端,这个XSS对每个用户都是持久的。

你如何解决这个问题?

我的想法是转义服务器上的数据,以便返回的数据安全地在模板中使用。那么我是否必须始终使用wait: true,以确保未呈现未转义的数据?为了编辑,添加另一个属性与非转义数据,然后可以用来填充文本字段使用.val()

还是你没有做到这一点,并在渲染模板之前转义客户端上的数据?

+2

模型的转义函数怎么样? http://backbonejs.org/#Model-escape – eveevans

+1

看起来这个例子现在已经修复了。 –

回答

48

Todo示例不是最干净的示例。它采用underscore's template engine,如下:

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

要正确逃生的HTML,使用​​3210代替<%=

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

骨干的标准方法是使用model.escape(attribute)

从骨干文档backbonejs.org/#Model-escape

“类似拿到,但返回模型的属性的HTML转义版本。如果你从模型到HTML插值数据,使用转义检索属性将阻止。 XSS攻击“。

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

alert(hacker.escape('name'));