XSSは、「悪意あるscriptタグを入力される脆弱性」ではありません。
本質は、次の一点にあります。
信頼できないデータが、ブラウザーの実行能力を持つコンテキストへ到達すること。
初期のXSSは、主にサーバーが生成するHTMLの問題として扱われていました。
その後、DOM-based XSS、mXSS、Script Gadget、DOM Clobbering、Prototype Pollution、WebViewなど、ブラウザー内部やプラットフォーム階層まで攻撃面が広がりました。
ただし、古いXSSが新しいXSSへ置き換わったわけではありません。
現在は、古典的な反射型・格納型に、クライアント側とプラットフォーム側の攻撃経路が積み重なっています。
実務では、次の順序で対策します。
自動エスケープを維持する
コンテキストに合わせて出力エンコードする
innerHTMLなどの危険なSinkを減らす
HTMLが必要な場合だけ専用サニタイザーを使う
API、WebSocket、Storageの値も信頼しない
管理画面やログ画面もテキスト表示する
CSPを防御の追加層として導入する
Trusted Typesで危険なSinkを制御する
アップロードファイルを別オリジンで配信する
CI、コードレビュー、自動テストで再発を防ぐ