Express.js のセキュリティ対策

Javascript を実行されないようにする

以下のように HTML に埋め込まれた場合、button をクリックすると javascript が実行されてしまいます。

<% $data="hoge onclick=alert('ぐえ〜〜!')" %>
<input type="button" value=<%= $data %>>

「 " 」で変数を囲うと実行されなくなります。

<input type="button" value="<%= $data %>">

文字のエスケープ処理

すべての文字をエスケープするのは、非現実的なので最低でも「 & 」、「 < 」、「 > 」、「 " 」はエスケープしておきます。

function sanitize(str){
  return String(str).replace(/&/g,"&")
  .replace(/</g,"<")
  .replace(/>/g,">")
  .replace(/"/g,""")
}

サニタイズとエスケープどちらを使うのかという議論もなされているようです。

sanitize : サニタイズ

消毒する