+ JavaScript の質問 ..
293:Name_Not_Found
14/11/11 00:26:54.56 .net
ここらへんで、一旦まとめを書いておきますね。
Q. innerHTMLは絶対に使ったらダメなの?
A. XSSが起きるような使い方をしなければ使って問題はありません。
Q. XSSが起きる場合とはどんな時ですか?
A. ユーザーからの入力された変数をそのまま出力するとXSSになる可能性があります。
Q. XSSが起きないようにするにはどうすればいいですか?
A. エスケープをしましょう。以下は例です。
innerHTML = '<table id="tbl"><tr><td class="first">' + escapeHTML(text) + '</td></tr></table>';
Q. escapeHTMLが使えません。
A. 残念ながら標準では用意されていないのでライブラリを使うか自分で実装する必要があります。
例
function escapeHTML(str) {
return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
}
lodash.js URLリンク(lodash.com)
Prototype.js URLリンク(api.prototypejs.org)
Q. escapeHTMLと書くのが面倒です。
A. テンプレートライブラリなどを使えば簡単にかけます。
例 lodash
_.template('<b><%- value %></b>', { 'value': '<script>' });
// → '<b><script></b>'
Q. createElementやappendChild等のDOM命令を使ったほうがいいのではないですか?
A. 使ってもいいですがコードが冗長になります。
安全な場合(XSSが起きない場合)は冗長にしてまでDOMを使う理由がありません。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
563日前に更新/282 KB
担当:undef