私たちのレガシー アプリケーションは当初、カスタマイズ可能なページの html タグを格納できるように設計されていました。このようなページのアイデアは、顧客が必要とする HTML を保存し、ある時点でこの HTML データをレンダリングする可能性があるということです。
このアプローチにより、ユーザーは任意の XSS を保存できました。現在の目標は、XSS の保存を許可しないポリシーを定義して適用することです。
いくつかの事前定義されたルールに基づいて、html をサニタイズできるいくつかのアプローチを検討しました。
しかし、どちらのアプローチも検証ではなくサニタゼーションに基づいています。したがって、基本的なシナリオは次のようになります。
- ユーザーが入力するデータを入力します
- ユーザー入力はサニタイズされ、生の (初期 - ステップ 1) ユーザー入力と等しいかどうかがチェックされます。
- 検証が失敗したと見なされる違いがある場合。
このアプローチは、新しいデータに対して機能します。レガシー データの場合、いくつかの問題が発生します。
- ユーザーのレガシー データに禁止された要素が含まれている場合、ユーザーは HTML コンテンツのわずかに変更されたバージョンを保存できません。
- 次のフローはユーザーを混乱させます。
- ユーザーは、新しく定義されたポリシーに関する禁止タグ/コンテンツを含むレガシー データを編集します。
- ユーザーはすべてのコンテンツを置き換えて保存します。
- ユーザーが何らかの理由で古いバージョンに戻すことを決定した
- 禁止されたタグ/コンテンツが含まれているため、ユーザーは以前のバージョンを保存できません。
したがって、次の質問が表示されます。
- 悪意のある html 要素と XSS ベクターのユーザー入力を検証する最善の方法は何ですか?
- レガシ データに関する前述の問題を解決するには、どのアプローチを使用できますか?