2

サーバーとして機能し、クライアントからデータを受け取るプログラムを Python で作成しています。データ量に厳しい制限を課すのは良い考えですか?

詳細情報: 特定のチャット プログラムでは、1 回の送信 (つまり、ユーザーが [送信] を押すたび) に送信できるテキストの量が制限されているため、問題は、これに正当な理由があるかどうかです。

4

3 に答える 3

2

ほとんどの場合、「余分な」受信データから保護するコードを見たことがあるでしょう。これは多くの場合、メモリにコピーされる余分なデータが事前に割り当てられた配列をオーバーランし、実行可能コードを攻撃者コードで上書きするバッファ オーバーランの可能性によるものです。通常、C などの言語で記述されたコードには、この種の攻撃を防ぐために多くの長さチェックがあります。gets や strcpy などの関数は、fgets や strncpy などのより安全な対応する関数に置き換えられます。これらには、バッファ オーバーランを防ぐための長さの引数があります。

Python のような動的言語を使用する場合、配列のサイズが変更されるため、オーバーフローして他のメモリが破壊されることはありませんが、外部データのサニタイズには注意する必要があります。

チャット プログラムは、データベース フィールド サイズなどの理由で、メッセージのサイズを制限する可能性があります。受信メッセージの 80% が 40 文字以下、90% が 60 文字以下、98% が 80 文字以下である場合、メッセージ テキスト フィールドでメッセージごとに 10,000 文字を許可するのはなぜですか?

于 2008-10-15T07:17:11.187 に答える
1

あなたの質問は正確には何ですか?

ソケットで受信すると、ソケット バッファ内の現在使用可能なデータがすぐに返されます。receive (または read だと思います) に 40000 などの巨大なバッファー サイズを指定すると、一度にそれほど多くのデータが返されることはありません。100 のような小さなバッファ サイズを指定すると、すぐに 100 バイトが返されますが、まだ使用可能な容量があります。いずれにせよ、クライアントが送信するデータ量に制限を課しているわけではありません。

于 2008-10-15T05:00:04.523 に答える
0

実際のアプリケーションが何であるかはわかりませんが、クライアントが送信できるデータの合計量にハードリミットを設定すると、サービス拒否攻撃への露出を減らすのに役立ちます。たとえば、クライアントが接続して 100MB のデータを送信すると、アプリケーションを許容できないほどロードする可能性があります。

しかし、それは本当にあなたのアプリケーションが何であるかに依存します. 回線ごとの制限または接続ごとの合計制限の後にいますか?

于 2008-10-16T01:10:57.573 に答える