- 435 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 16:56:27.94 ID:u0ZoFejP.net]
- ・「クライアントサイド」のJavaScriptでは、innerHTMLをエスケープ(サニタイズ)する必要ないのか?
サイトのJSON_APIがスクリプトタグを含む文字列を送ってきていて、 こちらのGreaseMonkeyスクリプトは今はそれをそのまま表示してしまっている。(見た目は消える) これはXSS的に問題だと思っていたのだが、以下を見ると、またこちらでも試した限り、 divタグの中身等としてappendChild/insertBeforeする分には実行されないようだ。 > が!残念ながらこの場合はscriptは動きません。 > tech-blog.tsukaby.com/archives/894 とはいえ、見た目消えてしまうのでどのみち修正は必要なのだが、 XSSの脆弱性という意味での対策は必要ないということでいいのだろうか? 俺はJavaScriptの専門家ではない。 したがって情報は基本的に全てWebなのだが、例えば以下のように、 > 例えば、DOM Based XSSを発生させる典型的なコードの例として、 > 以下のようなinnerHTMLの使用があったとします。 > // ★★★脆弱なコードの例★★★ > var div = document.getElementById( "msg" ); > div.innerHTML = some_text; // 外部からコントロール可能な文字列 > www.atmarkit.co.jp/ait/articles/1312/17/news010_2.html とあって、その後「ブラウザー上で」エスケープするなりcreateTextNodeをしているわけだが、 これって全くの間違いで、必要ないのだろうか? (サーバーサイドならもちろん必要として、クライアントサイドなら問題なしでいいのか? 今のところ、筆者もこれらを混同しているように見える。 記事は2013/12と古いのだが、これ以降に仕様変更されたのか? なお上記一つ目(動かないと書いている方)のブログは2015/04) なお念のため再度言うが、「クライアントサイド」で「innerHTML」の場合。 「サーバーサイド」でもなく、「outerHTML」でもない。
|

|