私は 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 %>" />