jQuery による DOM based XSS 対策
in-place-editor なんかでユーザ入力文字を、DOM上に挿入する場合、こんな関数作って呼んでた
var escHTML = function( text ){ return text.replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"'); };
Web+DB Press Vol63 によると、「'」や「`」もエスケープしなきゃいけないようで以下のようになる。
var escHTML = function( text ){ return text.replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, ''') .replace(/`/g, '`'); };
jQueryを使ってもできるということで、以下のような感じになるようだが
var escHTML = function( text ){ return $('<span/>').empty().text(text).html(); };
「`」「"」「'」はエスケープされない・・・