私はBackbone.jsアプリケーションを構築していて、Backbone.jsを使用するときにXSSまたはHTMLエスケープを処理するための最良の方法は何でしょうか。
公式のBackbone.jsドキュメントの基本的なTodosサンプルアプリケーションでは、データはエスケープされていません。このデータはtodoエントリをレンダリングするためのテンプレートで使用されるため、次のテキストを入力することでJavascriptコードを実行できます(上記のリンクで再現できます)。
"><script>alert('xss');</script>
RESTサーバーをストレージバックエンドとして使用する場合、このXSSはすべてのユーザーに対して永続的です。
この問題をどのように解決しますか?
私の考えは、サーバー上のデータをエスケープすることです。そうすれば、返されたデータはテンプレートで安全に使用できます。wait: true
次に、エスケープされていないデータがレンダリングされないようにするために、常にを使用する必要がありますか?.val()
また、編集する場合は、エスケープされていないデータを使用して別の属性を追加します。この属性を使用して、 ?を使用してテキストフィールドに入力できます。
または、テンプレートをレンダリングする前に、これを行わずにクライアント上のデータをエスケープしますか?