JavaScriptによるブラウザ上での処理量およびコード量の増加に伴い,
DOM-based XSSとは
本連載第2回で説明したような一般的な反射型および蓄積型のXSSのほとんどは,
たとえば,
// bad code
div = document.getElementById("info");
div.innerHTML = location.hash.substring(1);
このコードは,
このように,
これまではサーバ上でHTMLの生成が行われていましたが,
また,
- ※1
- Mozilla Firefoxでは,
URL中の#以降が%にエンコードされるため, タグ扱いされません。また, Google Chromeでは, XSS Auditorによりスクリプトはブロックされる可能性があります。
DOM-based XSSが厄介な理由
IEやEdgeのXSSフィルタをはじめ,
しかし,
さらに,
それにも関わらず,
DOM-based XSSの原因 ~シンクとソース
かんたんなDOM-based XSSの例として,
このとき,
DOM-based XSSのソースとして働く機能の代表例としては,
- location.
hash - location.
search - location.
href - document.
cookie - document.
referrer - window.
name - Web Storage
- IndexedDB
- XMLHttpRequest.
responseText
一方,
- HTMLElement.
innerHTML - location.
href - document.
write - eval
- setTimeout, setInterval
- Function
- jQuery(), $(), $.html()
これら以外にも,
攻撃者がソースに与えたJavaScriptが,
シンクにはさまざまなものがありますが,
ただ,
また,
さらに,