DOM-based XSS 発生する原因

DOM-based XSSとは

Dom-based XSS とは、ブラウザ上で動作するJavaScript上のコードに問題があるために発生します。 主に以下のJavaScriptのメソッド、プロパティを使用した際に、発生する可能性が高いです。

  • document.write()
  • document.writeln()
  • document.domain
  • element.innerHTML
  • element.outerHTML
  • element.insertAdjacentHTML
  • element.onevent

これらのメソッド、プロパティの使用方法を間違えるとDOM-based XSSの原因に繋がります。 どういった時にXSSが実行されるのか、見ていきます。

document.write()

document.write()とは

文字列や変数の値を表示させるメソッドです。 以下の用に使用すると、HTML上に「Hello World」と表示させることができます。

document.write('Hello World')

また、以下のHTMLのタグを含めた使用方法もできます。こう使用することにより、HTMLのタグが反映され、「Hello World」が見出しとして大きく表示されます。

document.write('<h1>Hello World</h1>')

document.write()のDOM-based XSS

DOM-based XSSが発生する原因は、利用者から入力を受け取り、document.write()に反映されることにより発生します。 例

let input = '<img src=1 onerror=alert(1)>' // 利用者の入力値
document.write(input)  // DOM-based XSSの発火原因

DOM-based XSSの発生原因 結論

基本的に、利用者から入力を受け取り、任意のメソッド、プロパティに反映させることにより、DOM-based XSSの発生原因になります。