Spring REST APIとクライアントプロジェクトがあります。クライアントプロジェクトのHTMLページは、jquery ajax呼び出しを使用して、jsonまたはxml形式を使用してREST APIからデータをフェッチします。私の質問は、Webページに対するXSS攻撃を回避することです。ユーザー入力データ(つまり、信頼できないデータ)のエンコードはどこで実行する必要がありますか?現在、応答を返す前に、データをRESTコントローラにエンコードしています。 OWASP XSS防止のチートシートの記事に従っています。しかし、私のシナリオでは、すべてがajax呼び出しとjsonからのデータのフェッチとjqueryを使用したhtmlへの書き込みであるため、ユーザーエンコーダーが信頼できないデータをどこにエンコードするかは不明です。エンコーディングをRESTコントローラに配置することは良いオプションですか?
前もって感謝します。
REST APIが純粋にJSONを返す(HTMLを返さない)場合、JavaScriptでクライアント側をエスケープするHTMLを実行します。
クライアントのHTMLページがJQueryテンプレートを使用するか、.html()
などの関数を呼び出してHTMLを構築するかどうかにかかわらず、デフォルトではどちらもXSS保護を備えていません。 1つのアプローチは、クライアントコードがすべての信頼できない入力に対してエスケープ関数を明示的に呼び出すことです。ただし、私が好むアプローチは、自動エスケープを行うJQueryプラグインを使用することです。これには2つの方法があります。
「セキュリティのためにクライアント側の制御に依存することはできない」と言って、人々はこのアプローチを批判するかもしれません。その批判は誤解に基づいています。この特定のインスタンスでは、それを信頼できます。
AngularJSにデフォルトで自動エスケープが含まれていることは注目に値します。今日彼らがゼロからJQueryを作成した場合、JQueryにもこれが含まれると思います。
REST APIでHTMLエスケープを行わない理由の1つは、HTML以外のクライアントがAPIを使用している可能性があることです。その場合、HTMLエスケープを適用したくないはずです。 。
APIの誤用攻撃を回避するために、正しいContent-Typeヘッダー(application/json)を使用してJSONを返すことが重要です。