1

私はsocket.ioを使用するリアルタイムWebアプリを開発しています。私の懸念は、クライアント側でこれを介してsocket.io jsファイルをロードする<script>/socket.io/socket.io.js</script>と、ioインスタンスがグローバルオブジェクトとして公開されることです。これで、Chrome開発者ツールを開くと、サーバーへの接続を作成できます。

var socket = io.connect();

これで、誰でもイベントを発行し、クライアントが発行したイベントをリッスンしているサーバーに悪意のあるデータを送信できます。例として、クライアントコードにこれがあります。

(function (sio) {
    var socket = sio.connect();
    // some code here...
    // once a user submitted the comment, it will emit an comment:create event to the
    // server
    socket.emit("comment:create", comment);
}(io));

Chrome開発者ツールでは、接続を作成してから、2番目の引数としてnullを渡すなど、アプリをクラッシュさせる可能性のある悪意のある引数を使用して同じイベントを発行できます。そのような問題を防ぐ方法はありますか?

io編集:私の現在の解決策は、クライアント側のコードでインスタンスのローカルコピーを作成し、グローバルioオブジェクトをnullに設定して、別の接続が確立されないようにすることです。

4

1 に答える 1

1

クライアントが最初の (HTTP) 接続を確立し、それをセッション変数として保存するときに、サーバー側のコードである種の (かなりランダムな) トークンを作成します。クライアントが送信するすべてのメッセージの一部としてトークンを含めることをクライアントに要求し、socket.io一致しないメッセージを拒否します。

于 2012-10-01T09:20:24.630 に答える