Backbone.js and XSS/HTML escaping



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

在官方Backbone.js文档中的基本Todos示例应用程序中,数据没有转义。由于该数据在模板中用于呈现todo条目,可以通过输入以下文本来执行Javascript代码(可以在上面的链接中复制):

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

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

你是如何解决这个问题的?

我的想法是对服务器上的数据进行转义,这样然后返回的数据就可以安全地用于模板中。那么,我是否必须始终使用wait: true,以确保不呈现未缩放的数据?为了进行编辑,添加另一个具有未标注数据的属性,然后可以使用.val()填充文本字段?

还是在呈现模板之前,不执行这些操作并转义客户端上的数据?

Todo示例不是最干净的示例。它使用下划线的模板引擎,如下所示:

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

要正确地转义HTML,请使用<%-而不是<%=:

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

主干网中的标准方法是使用model.escape(attribute)

来自主干文档backbonejs.org/#模型转义:

类似于get,但返回模型属性的HTML转义版本。如果将模型中的数据插入HTML,使用转义检索属性可以防止XSS攻击

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

相关内容

  • 没有找到相关文章

最新更新