じぶんメモ

プログラミングのメモ、日常のメモとか。

javascriptでの文字列エスケープ

XSS対策としてjavascriptでの文字列エスケープについて調べた。

PHPや他の言語のようにサニタイズメソッドが用意されていないようなので
独自に実装するのが良さそう。

考慮する必要があるのは、

< → &lt;
> → &gt;
" → &quot;
' → &#39;
& → &amp;

リプレースで対応

  function htmlentities(str) {
    return String(str).replace(/&/g, "&amp;")
              .replace(/"/g, "&quot;")
              .replace(/'/g, "&#39;")
              .replace(/</g, "&lt;")
              .replace(/>/g, "&gt;");
  }

innerText書き換えで対応

innerTextの書き換えでも対応可能。
innerHTMLではエスケープされないので注意。

var mess = '<script>alert("XSS!")</script>';
var spanTag  = $(".span-text");

// innerText書き換え
spanTag.text(mess);
// innerHTMLではエスケープされないので注意
spanTag.html(mess);