ブラウザー内のJavaScriptが、信頼できないデータを危険なSinkへ渡すXSSです。
入力
↓
API・URL・WebSocket・Storage
↓
JavaScript
↓
innerHTMLなど
↓
ブラウザーで実行
Client XSSには次が含まれます。
Reflected Client XSS
Stored Client XSS
DOM-based XSS
APIから取得した保存済みコメントを、JavaScriptがinnerHTMLへ表示するケースを考えます。
コメントをDBへ保存
↓
APIがJSONで返す
↓
JavaScriptが取得
↓
innerHTMLへ代入
この脆弱性は、次の両方に該当します。
Stored XSS
Client XSSまたはDOM XSS
XSSの分類は一つだけ選ぶものではありません。
複数の分類軸を組み合わせて表現します。
<p>{{ user_input }}</p>
必要な対策は、HTML本文用の出力エンコードです。
<input value="{{ user_input }}">
属性値は必ず引用符で囲みます。
次のように引用符がない構造は危険です。