質問: サーバーでNode.js クライアントはJavaScripでチャットを作ろうと思っています。 この際XSS対策等、セキュリティ関連のエスケープ処理ではどういった実装をすればいいのでしょうか? 単純に、危険そうな文字列をサーバーでエスケープするのもありですが、サーバー側で文字を可変されエスケープ処理を廃棄されても意味が有りません Node.jsにはHelmetとゆうモジュールもあるようですが、クライアントのJavaScript実行環境はMonacaとゆう携帯アプリでしてドメイン等はなく、SocketIoは ``` https://cdn.socket.io/socket.io ``` で取得します。 アドバイスいただけたらと思います。
回答: XSSにしてもSQLインジェクションにしてもエスケープの鉄則は、**相手のシステムへ出力する直前に**行うことです。途中で変にエスケープを入れてしまうと、「本来意図しないデータが生成されてしまう」「どこまでがエスケープしたデータなのかわからなくなる」など、不具合や脆弱性の要因となります。 Socket.ioの場合、「Socket.io側でHTMLまで作ってしまう」という構造にするなら別ですが(普通そんなことはしません)、そうでなければHTML生成を行うのは**フロントエンド側のJavaScript**です。 いちばんいいのは、テキストしか出力しない場面ではjQueryの`.text()`やDOMの`.textContent`など、「HTMLと解釈される余地のない」出力方法を使うことです。