Backbone.js と XSS/HTML エスケープ 質問する

Backbone.js と XSS/HTML エスケープ 質問する

私は Backbone.js アプリケーションを構築していますが、Backbone.js を使用する際に XSS や HTML エスケープに対処する最善の方法は何かと思っています。

基本的なTodos サンプルアプリケーションBackbone.jsの公式ドキュメントによると、データはエスケープされません。このデータはテンプレートでToDoエントリをレンダリングするために使用されるため、Javascriptコードを実行することが可能です以下のテキストを入力します(上記のリンクで再現できます)。

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

REST サーバーをストレージ バックエンドとして使用する場合、この XSS はすべてのユーザーに対して永続的になります。

この問題をどのように解決しますか?

私のアイデアは、サーバー上でデータをエスケープして、返されたデータをテンプレートで安全に使用できるようにすることです。wait: trueエスケープされていないデータがレンダリングされないようにするには、常に を使用する必要がありますか? また、編集用に、エスケープされていないデータを含む別の属性を追加し、 を使用してテキストフィールドに入力するために使用できますか.val()?

それとも、テンプレートをレンダリングする前に、これを何もせずにクライアント上でデータをエスケープしますか?

ベストアンサー1

Todoの例は、あまりきれいな例ではありません。アンダースコアのテンプレートエンジン、 次のように:

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

HTML を正しくエスケープするには、<%-の代わりにを使用します<%=

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

おすすめ記事