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の発生原因になります。