MMOゲームのプレイヤーは通常、さまざまなチャネル(プライベート、パブリック、ギルドなど)を介してメッセージを送信できます。
外部のユーザーが誰かのプライベートチャットメッセージにアクセスできないようにするには、どのようにこのデータを送信して保存しますか?データを一時的なゲームログまたはデータベースに保存する必要がありますか?
MMOゲームのプレイヤーは通常、さまざまなチャネル(プライベート、パブリック、ギルドなど)を介してメッセージを送信できます。
外部のユーザーが誰かのプライベートチャットメッセージにアクセスできないようにするには、どのようにこのデータを送信して保存しますか?データを一時的なゲームログまたはデータベースに保存する必要がありますか?
回答:
外部の当事者がクライアントからのチャットパケットを傍受する機能を実際に削除するつもりはありません。MMOを構築するときは、産業用の強度ではなくゲームを構築するため、あまり心配する必要はありません。暗号で保護されたチャットプラットフォーム。
次のようにチャットメッセージを実装する必要があります。
ここで最も脆弱な点は、クライアントからサーバーへの最初の送信です。誰かがこれらのパケットをスヌープすると、技術的にそれらを意図していないメッセージを見ることができます。データを暗号化することもできますが、これは最小限の利益のためだけの多大な労力です。クライアントは最終的にチャットパケットを復号化できる必要があり、パケットがクライアントを離れるときにパケットを傍受することが前述のスヌーピングを行うのに最適な場所となるため、スヌーパーはキーを入手できますが、見つけるのは少し難しくなります。
ただし、管理しているサーバーを経由してチャットを渡すことが非常に重要です。それはゲームサーバーである必要はなく、チャットをファネリングするための専用サーバーにすることができますが、ルーティングを制御したいとします。GMの紛争を監視し、ユーザーリクエストを強制して他のユーザーをブロックまたはミュートし、NATパンチングやピアツーピアチャットを実行しようとしている可能性のある他のネットワーキング詐欺で起こり得る問題を解決します。これは、カジュアルなハッキング(ピアツーピアのチャットが起こりやすい)に対する十分な障壁を提供し、セキュリティ上の懸念の90%を解決します。それはあなたが手に入れるのと同じくらい良いことです。
正直言って、あなたが何を求めているのか100%わかりません。しかし、うまくいけば、以下が役に立ちます。
あなたに見ればプレーンシフト、オープンソースのMMOは、あなたが彼らのコードを見て、彼らは彼らのシステムアーキテクトに決めたかを見ることができます。これにより、すべてのMMOについて正確な洞察が得られるわけではありませんが、ほとんどの場合、実装はさまざまなゲームで同じです。
ここではそれらのソースをダウンロードするためのいくつかの方向です。SVNでチェックアウトする必要があります
私は一見しました、そしてあなたが中に入るならばsrc/client/gui/
、ChatWindowクラスを見るでしょう。チャットのためにメッセージをサーバーに送り返したり、サーバーに送信したり、入力履歴も処理します。情報をパッケージ化し、サーバーに送信して配信するようです。したがって、このチャット情報はサーバーに保存されているため、だれもがアクセスできないと思います。これは、チャットレコードにアクセスするためにサーバーデータベースにアクセスできない場合です。彼らがすべてを維持できるとは思えません。チャットログを保持している場合は、おそらく一定の期間(おそらく数日か?)
とにかく、幅広い質問に対する幅広い答え。もっと焦点を絞った質問なしに、私は本当にそれよりはるかにうまくやることはできません。あなたがより狭い質問を持っているならコメントしてください、そして私がそれらに答えてみることができます。
Edit1:また、クライアントフォルダーでauthentclientクラスを見つけられることにも注意してください。これはクライアント認証などを処理します。チャットサーバーへの自身の認証という点で、チャット関連のセキュリティも処理すると思います。チャット専用のサーバーがない場合があります。したがって、すべてのクライアントに対してチャットサービスも実行しているのは、ゲームサーバーだけかもしれません。これは、実際にコードを研究することで理解できるものです。
より大きなMMOの場合、プレイヤー間のチャットを処理するためだけに専用のチャットサーバーを用意することで、彼らにお金をかけます。(インスタンスの場合と同じように)。
私がプレイしたほとんどのMMOは、メッセージを長期間保存しません。それはおそらく彼らをNSAのような否定的なバッジを持つGameCompanyに変えるからです。プレイヤーがデータベースに直接アクセスする場合を除きます。
Runescapeはメッセージをキャッシュに保存しており、ごくわずかな時間しか利用できません。そのようなデータが保存されているという事実のために、誰もが禁止されるのを聞いたことがありません。彼が言ったことについて別の劇を報告する必要がある場合。500〜ラインチャットの制限を使い果たすまで、彼は迅速でなければなりません。その後、彼のメッセージはすべて削除されます。プレーヤーが互いに叫ぶ最も混雑した場所では、最大10秒です。
メッセージは常にサーバー経由で送信され、保存はクライアントではなくサーバーで行われます。それ以外の場合、クライアントにハッキングしたプレーヤーAは、チャットを担当する配列を操作し、プレーヤーBが他の何かを書き込んだことを文字通り書き込むことができます。しばらくすると、彼はそのプレーヤーが何かを書き込んだことを報告でき、他のプレーヤーのキャッシュはそのような情報を保持できなくなる可能性があります。
チャットポータルGaduGadu.plによって行われたクライアントにメッセージを保存すると、ユーザーは別のPCでチャットをチェックできなくなります。ユーザーが生成したデータは、第三者に対して脆弱になります。主に公共のインターネットカフェで。または彼の元の友人に復讐を求めるかもしれない友人の家で。
サーバーに保存すると、プレーヤーBがプレーヤーAのデータにアクセスできなくなり、その逆も不可能です。「プレーヤーBがそのデータにアクセスできるか」というのは幅広い質問です。サーバーがオフラインでない限り、データが安全かどうかを確認することはできません。 ここでは一例です。
メッセージの保存は、後で配信する場合にのみ必要です。たとえば、人々がオフラインでログインしているプレイヤーにメッセージを送信できるようにする場合や、次回ログイン時に管理者がチャットを読むことを許可する場合などです。
これが不要な場合は、チャット処理を完全にインメモリで実行できます。
クライアントが送信する各チャットメッセージには、受信者に関する情報(パブリック、ギルド、プレイヤーXへのプライベートメッセージ)を含める必要があります。次に、サーバーはメッセージの読み取りを許可する文字を決定する必要があります。
次に、これらの文字を制御するクライアントにメッセージを送信する必要があります。
ユーザーには表示されないはずのメッセージをクライアントに送信することは、トラフィックの無駄であり、「クライアントを信頼しない」という原則に違反します。