サーバーは無関係。ブラウザ上のJavaScriptが、URLのフラグメント
(#以降・サーバーには送られない)を innerHTML に入れることで
XSSが成立する。サーバー側では検知も対策もできない。
攻撃例: URLの末尾に
#<img src=x onerror=alert(1)> を付けて開く。
商品ID: (#以降を読み込みます)
商品ID: (#以降を読み込みます)
innerHTML は文字列をHTMLとして解釈する(=タグが動く)。
textContent は常にただの文字として扱う。ユーザー由来のデータは
textContent で入れるのが基本。どうしてもHTMLが必要ならサニタイズする。