2016 年の更新: Caja サニタイザーに基づくGoogle Closureパッケージが追加されました。
よりクリーンな API があり、最新のブラウザーで利用可能な API を考慮して書き直され、Closure Compiler とのやり取りが改善されています。
恥知らずなプラグイン:徹底的にレビューされたクライアント側の HTML サニタイザーについては、caja/plugin/html-sanitizer.jsを参照してください。
ブラックリストではなくホワイトリストに登録されていますが、ホワイトリストはCajaWhitelistsに従って構成可能です
すべてのタグを削除する場合は、次の手順を実行します。
var tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*';
var tagOrComment = new RegExp(
    '<(?:'
    // Comment body.
    + '!--(?:(?:-*[^->])*--+|-?)'
    // Special "raw text" elements whose content should be elided.
    + '|script\\b' + tagBody + '>[\\s\\S]*?</script\\s*'
    + '|style\\b' + tagBody + '>[\\s\\S]*?</style\\s*'
    // Regular name
    + '|/?[a-z]'
    + tagBody
    + ')>',
    'gi');
function removeTags(html) {
  var oldHtml;
  do {
    oldHtml = html;
    html = html.replace(tagOrComment, '');
  } while (html !== oldHtml);
  return html.replace(/</g, '<');
}
人々は、要素を作成し、割り当ててからorinnerHTMLを取得し、その中のエンティティをエスケープできると言うでしょう。そんなことしたらダメ。ノードが DOM にアタッチされていない場合でもハンドラーを実行するため、XSS インジェクションに対して脆弱です。innerTexttextContent<img src=bogus onerror=alert(1337)>onerror