回答編集履歴

1 表示に限らないので修正

maisumakun

maisumakun score 123984

2017/05/28 11:15  投稿

XSSにしてもSQLインジェクションにしてもエスケープの鉄則は、**表示する直前に**行うことです。途中で変にエスケープを入れてしまうと、「本来意図しないデータが生成されてしまう」「どこまでがエスケープしたデータなのかわからなくなる」など、不具合や脆弱性の要因となります。
XSSにしてもSQLインジェクションにしてもエスケープの鉄則は、**相手のシステムへ出力する直前に**行うことです。途中で変にエスケープを入れてしまうと、「本来意図しないデータが生成されてしまう」「どこまでがエスケープしたデータなのかわからなくなる」など、不具合や脆弱性の要因となります。
Socket.ioの場合、「Socket.io側でHTMLまで作ってしまう」という構造にするなら別ですが(普通そんなことはしません)、そうでなければHTML生成を行うのは**フロントエンド側のJavaScript**です。
いちばんいいのは、テキストしか出力しない場面ではjQueryの`.text()`やDOMの`.textContent`など、「HTMLと解釈される余地のない」出力方法を使うことです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る