スクリプトインジェクション / クロスサイトスクリプティング(XSS)

概要

サイトにスクリプトを含むリクエストを送信し、サイトを訪れた第三者に悪意のあるコードを実行させる脆弱性の総称。

攻撃対象のサイトだけでなく、別サイトへのリダイレクトなど複数サイトを横断させてスクリプトを実行させることもできることからクロスサイトスクリプティング(XSS)とも呼ばれる。

名前説明
持続型攻撃者がスクリプトを含むリクエストを送信してサーバーに保存させる。保存されたスクリプトを組み込んだページを訪れた第三者にスクリプトを実行させる。
反射型第三者にスクリプトを含むリクエストを送信させる。送信したスクリプトがページ内に差し込まれる脆弱性を利用して、リクエストを送信したページ上でスクリプトを実行させる送信したスクリプトはサーバーに保存されない。
DOMベース第三者にスクリプトを含むリクエストを送信させ、クライアントサイドスクリプトの脆弱性を利用する。

対応方法

  • 出力時にエスケープして攻撃コードを無効化する。
  • 厳密に値を入力検査する
  • インラインスクリプトにユーザーの入力を展開しない。
  • Content Security Policy(CSP)を設定する
    • インラインスクリプトの実行を禁止すれば、混入したコードの実行自体を防げる。
    • エスケープ漏れが起きたときの多層防御として働く。
  • 文字コードを指定する
    • レスポンスヘッダーに適切な文字コードを指定しないと、文字化けを利用してスクリプトを混入させる隙を与えるため。

参考