質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

3460閲覧

Node.jsでSocketioを使う際のセキュリティについて

seri

総合スコア422

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2017/05/28 01:01

編集2022/01/12 10:55

サーバーでNode.js クライアントはJavaScripでチャットを作ろうと思っています。

この際XSS対策等、セキュリティ関連のエスケープ処理ではどういった実装をすればいいのでしょうか?

単純に、危険そうな文字列をサーバーでエスケープするのもありですが、サーバー側で文字を可変されエスケープ処理を廃棄されても意味が有りません

Node.jsにはHelmetとゆうモジュールもあるようですが、クライアントのJavaScript実行環境はMonacaとゆう携帯アプリでしてドメイン等はなく、SocketIoは

https://cdn.socket.io/socket.io

で取得します。

アドバイスいただけたらと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2017/05/28 03:06

タイトル編集をお勧めします。× NOde.js 〇 Node.js
seri

2017/05/28 03:08

ありがとうございます。
guest

回答1

0

XSSにしてもSQLインジェクションにしてもエスケープの鉄則は、相手のシステムへ出力する直前に行うことです。途中で変にエスケープを入れてしまうと、「本来意図しないデータが生成されてしまう」「どこまでがエスケープしたデータなのかわからなくなる」など、不具合や脆弱性の要因となります。

Socket.ioの場合、「Socket.io側でHTMLまで作ってしまう」という構造にするなら別ですが(普通そんなことはしません)、そうでなければHTML生成を行うのはフロントエンド側のJavaScriptです。

いちばんいいのは、テキストしか出力しない場面ではjQueryの.text()やDOMの.textContentなど、「HTMLと解釈される余地のない」出力方法を使うことです。

投稿2017/05/28 02:13

編集2017/05/28 02:15
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seri

2017/05/28 02:47

回答ありがとうございます。 テキストしか出力しない場面ではjQueryの.text()やDOMの.textContentなど、「HTMLと解釈される余地のない」出力方法を使うことです。 とのことですが、クライアント側からサーバーへ送られるテキストはエスケープ処理の必要はないとの解釈でもよろしいでしょうか?
think49

2017/05/28 03:04 編集

横からですが、「クライアント側からサーバーへ送られるテキスト」の何をエスケープしようとしていますか。HTMLとかSQL文とか、実体によって答えが変わりうる質問だと思うのですが。
seri

2017/05/28 03:05

ユーザーの名前と送りたい文章です。 サーバー内の構文をコメントアウトし、別の処理を書き込むような事が出来ないか不安です。
think49

2017/05/28 03:31

名前と文章は最終的に「どこ」に入力/出力されますか。 その場合、maisumakunさんが指摘された「直前」がサーバ/クライアントのどちらにあると考えられますか。
seri

2017/05/28 03:43

最終的な出力はクライアント側です、が。しかし、仮にクライアントから与えられた文章をサーバー内でそのまま使い回した場合、先程から言っている通り、それが安全か解らない状態ですので、エスケープは出力前とだけ言われても厳しいものがあるんです
maisumakun

2017/05/28 04:39

結論から言えば、APIサーバとして公開するサーバサイドは「どんな入力が来ても(異常値ならキチンとエラーを返して)おかしな動作をしない」ように作っておく必要があります。 攻撃者からすれば、公開サーバには「どんなリクエストでも投げられる」わけです。 むろん、クライアントサイドで「エラーにならないように」整形する必要はあるかもしれません(作り方によりますが)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問