私は、特定のメッセージに関するすべての情報を含むチャットプログラム用のクラスメッセージを作成しました。メッセージのインスタンスは、サーバーとクライアントの間で前後に送信されます。私はこれらのメッセージを交換するためにシリアル化(ObjectInputStream/ObjectOutputStream)を使用しています。シリアライゼーションの使用は深刻な問題ですか?
私は、シリアライズとデシリアライズのプロセスを制御できません。私にとって最大の問題は、何人かの攻撃者が本当に重いメッセージ(数ギガバイトなど)を送信したい場合、それを避ける方法がなく、深刻な記憶上の問題が生じる可能性があるということです。これはサービス拒否のために使用され、深刻なものです。
シリアライゼーションとそのセキュリティに関するさまざまな話題を取り上げましたが、この些細な問題を回避する方法については誰も言及していません。バッファを使用してデータをバイト配列として取得して、いつでも読み取りを停止できるようにしたいと考えています。しかし、私はシリアル化でこれを行う方法を見つけることができませんでした。 質問:どうすればいいですか?
シリアル化のセキュリティ上の問題についてのコメントも歓迎します。シリアライズ可能なクラスのインスタンスに悪意のあるコードを挿入できると聞いたことがありますが、クラスの定義がクライアントとサーバーで同じでなければならないため、これはどのように可能ですか?
ありがとうございました!
あなたがセキュリティについてどの程度深刻に依存します。 – Kayaman
JSONを使用するだけですか?ハードDDOSを防ぐ方法はありませんが、Javaのシリアル化を使用することにはいくつかの欠点があります。 – chrylis
あなたの質問は本当にシリアライゼーションではないようです。大量のメッセージを送信する人が気になる場合は、最大メッセージサイズを文書化して、クライアントAPIとメッセージを送信するサーバーに適用する必要があります。 –