2012-09-25 34 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'));