3

ブラウザとノード サーバー間の通信に WebSocket を使用する Web アプリケーションを作成しています。

デバッグ コンソール (F12) を開くと、ソケット インスタンスにアクセスして書き込むことができます。

例えば、socket.send('packetname', 'data')

誰かがコンソールを開いてこのようなものを書くのを妨げているのは何ですか?

socket.send(new Array(99999));

サーバーに送信されるこのデータはすべて膨大な量になる可能性があり、そこに到達するまでに、帯域幅はすでに使用されており、すでに処理されています. もちろん検証はありますが、その時点では手遅れであり、リソースはすでに処理に費やされています。

また、誰かが最初の要素が代わりに巨大な配列である配列を送信する可能性があるため、配列の長さを確認することもできません。バイトサイズを計算する方法はないと思うので、データを文字列化してサイズを確認するのが最善の方法だと思います (これは非常に遅いです)。

私のパケットはすべて非常に小さいです。特定のサイズを超えるパケットがサーバーに送信されないようにする方法を探しています。これは可能ですか?

4

2 に答える 2

1

クライアントを完全に制御できない限り(そうではありません)、クライアントが任意の大きなデータをシステムに送信するのを妨げることはできません。クライアントはブラウザを使用する必要さえないため、ブラウザ内の制限は機能しません。

予期しない量のデータを取得した場合はすぐにクライアントを切断し、オリジンをブラックリストに登録して、次の攻撃の試みが早期に停止されるようにするなど、対処する必要があります.

于 2016-06-17T20:20:03.630 に答える
1

これに対する「最善の」解決策はおそらくありません。このようなことが起こっているかどうかを検出するために、サーバー側で実装できることについて考えてみます。クライアント側でクライアントを停止する限り、それを行うのは難しいか、おそらく不可能です。サーバーは接続とデータを受け入れるように設計されているため、クライアントはこれを悪用しようとする可能性があります。

私が提案できる解決策の 1 つは、クライアントが 1 回の操作で送信するデータ量に「上限」を設けることです。アプリケーションの性質はわかりませんが、アプリケーションの性質上、クライアントが2500 bytes1 回の操作でデータを送信することは完全に不可能でしょう。

この場合、操作 (受信バイト数) がこの上限を超え始めると、接続が切断される可能性があります。

これは私が考えることができる 1 つの潜在的な解決策にすぎませんが、これらの線に沿って何かを考え出す必要があります。

于 2016-06-17T20:40:50.183 に答える