×
サイバー攻撃について

Client XSS


ブラウザー内のJavaScriptが、信頼できないデータを危険なSinkへ渡すXSSです。

入力
 ↓
API・URL・WebSocket・Storage
 ↓
JavaScript
 ↓
innerHTMLなど
 ↓
ブラウザーで実行

Client XSSには次が含まれます。

  • Reflected Client XSS

  • Stored Client XSS

  • DOM-based XSS


「格納型かDOM型か」という二者択一は誤り

APIから取得した保存済みコメントを、JavaScriptがinnerHTMLへ表示するケースを考えます。

コメントをDBへ保存
        ↓
APIがJSONで返す
        ↓
JavaScriptが取得
        ↓
innerHTMLへ代入

この脆弱性は、次の両方に該当します。

  • Stored XSS

  • Client XSSまたはDOM XSS

XSSの分類は一つだけ選ぶものではありません。

複数の分類軸を組み合わせて表現します。


実行コンテキストによる分類

HTML本文コンテキスト

<p>{{ user_input }}</p>

必要な対策は、HTML本文用の出力エンコードです。


HTML属性コンテキスト

<input value="{{ user_input }}">

属性値は必ず引用符で囲みます。

次のように引用符がない構造は危険です。