【问题标题】:Backbone.js and XSS/HTML escapingBackbone.js 和 XSS/HTML 转义
【发布时间】:2012-09-17 04:53:13
【问题描述】:

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

在来自官方 Backbone.js 文档的基本 Todos example application 中,数据没有被转义。由于该数据在模板中用于呈现待办事项条目,可以通过输入以下文本来执行 Javascript 代码(可以在上面的链接中复制):

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

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

你是怎么解决这个问题的?

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

或者在渲染模板之前,您是否不执行这些操作并转义客户端上的数据?

【问题讨论】:

标签: javascript backbone.js escaping xss


【解决方案1】:

Todo 示例并不是最简洁的示例。它使用underscore's template engine,如下:

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

要正确转义 HTML,请使用 &lt;%- 而不是 &lt;%=

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

【讨论】:

【解决方案2】:

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

来自主干文档backbonejs.org/#Model-escape

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多