私は主にWebアプリケーションを監査し、企業にセキュリティ対策と推奨事項を提供しています。現在、XSS保護に対するAngularJSのサニタイズ機能に関して、正しい推奨を与えることに問題があります。私はそれが大丈夫だと言ったり、サーバー側で出力エンコーディングを強制することを勧めたりすることに疑問を持っています。
誰かがこの問題で私を助けたり、違いを明確にしたりできますか?
tl; dr:エンコードは、データがコンテキストで使用されているときに行う必要があります-信頼できないデータからコードがHTML、JavaScriptなどを構成している場合-サーバーとクライアントのどちらで作成する場合でも同じです。その時点で、どの部分がデータであり、どのエンコーディングコンテキストであるかがわかります。 Angular)のバインディング(ng-bind)をコンテキスト固有のエンコーディングに活用する必要があります。AngularJSSanitize関数は、信頼できないHTMLの塊を「サニタイズ」する必要がある場合に役立ちます。
詳細:「サニタイズ」という用語を使用するときは注意が必要です。これは、ライブラリによって使用方法が異なるためです。つまり、検証、正規化、単純化を意味します。エンコーディング、解析、エンコーディング。
AngularJS Sanitize 関数は、HTMLをトークンに解析して入力を「サニタイズ」します。 (ホワイトリストからの)すべての安全なトークンは、適切にエンコードされた値にシリアル化されます。このように、それは OWASP HTML Sanitizer Project および古いOWASP Antisamyプロジェクトと同様に動作します。
ライブラリの使用の詳細については、 https://odetocode.com/blogs/scott/archive/2014/09/10/a-journey-with-trusted-html-in-angularjs.aspx を参照してください。
これは、HTML、JavaScript、またはURLをその一部から構成する余裕がない場合に、信頼できない入力をエンコードするための優れた方法です。しかしながら:
だからあなたができるところ: