メモリ不足エラーが発生しますか?
潜在的に、はい。
StringBuffer
単純なサーバーは、コマンドと引数に分割する前に、行全体を a に読み込もうとする可能性があります。(たとえば、これは何をするかBufferedReader.readLine()
、またはScanner.nextLine()
する予定です。)StringBuffer
ヒープをいっぱいにするのに十分な大きさになる可能性があります。( a の最大サイズStringBuffer
は2^31
chars ... であり、スペースの使用量は一時的にその 2 倍になる可能性があります。)
サーバーがもう少し慎重であっても、コマンドの処理を開始する前に (通常のコマンドの) すべての引数を取得する必要がある場合、問題が発生する可能性があります。そして、(どういうわけか)それに対処した場合は、コマンド名または単一の引数が~2^31
文字長である可能性を考慮してください。
これらの潜在的な DOS 攻撃を打ち負かす唯一の現実的な方法は、要求メッセージの長さに防御的な制限を設けることです。
私は大学でJavaの課題を与えられたので興味があります...
...ええと、ソリューションがサービス拒否攻撃に対して回復力があるという書面による要件がない限り、おそらく考えすぎです。これは演習であることを忘れないでください...実際の生産強度システムを構築するための要件ではありません.
実際のシステムを作成している場合は、この問題について「クライアント」と話し合い、対処方法を考えます。たとえば、プロトコル仕様を変更して、メッセージの長さ制限を含めます。