Bagaimana seharusnya obrolan ditransmisikan dan disimpan dalam MMO?

8

Pemain dalam game MMO biasanya dapat mengirim pesan melalui saluran yang berbeda (pribadi, publik, guild, dan lain-lain).

Bagaimana saya mengirim dan menyimpan data ini untuk mencegah pengguna luar agar tidak dapat mengakses pesan obrolan pribadi seseorang? Haruskah saya menyimpan data dalam log permainan sementara, atau database?

Pavan Kate
sumber
3
Bertanya "bagaimana cara MMO melakukannya" terlalu luas, dan membutuhkan pengetahuan orang dalam untuk menjawab dengan keyakinan. Saya menyesuaikan pertanyaan Anda untuk lebih fokus pada bagaimana Anda harus menerapkan obrolan untuk proyek Anda , dengan tujuan menjaga keamanan sebanyak mungkin.

Jawaban:

13

Anda tidak akan pernah benar-benar menghilangkan kemampuan pihak luar untuk mencegat paket obrolan dari klien, dan Anda tidak perlu terlalu khawatir, karena ketika Anda membangun MMO Anda sedang membangun permainan, bukan kekuatan industri platform obrolan yang aman secara kriptografi.

Anda harus menerapkan pesan obrolan sebagai berikut:

  • Klien mentransmisikan data obrolan, yang minimal menyertakan pesan obrolan tetapi mungkin juga termasuk informasi saluran atau grup (seperti obrolan publik, obrolan guild, bisikan pemain-ke-pemain, dan lain-lain).
  • Server mendapat data obrolan. Pertama-tama ia mencatatnya, mungkin di suatu tempat offline karena tidak perlu menyimpannya di memori lebih lama dari yang diperlukan. Logging penting dan sering diabaikan, tetapi ini sangat berguna untuk arbitrasi GM dan diagnostik forensik. Ketika Anda menjalankan MMO, Anda ingin mencatat semuanya .
  • Setelah data dicatat, server menentukan siapa yang harus mendapatkan pesan obrolan dan menyiarkannya dengan tepat. Server kemudian dapat menjatuhkan data yang tersisa di lantai; itu tidak membutuhkannya lagi.

Titik paling rawan di sini adalah transmisi klien ke server awal. Jika seseorang mengintip paket-paket itu, mereka dapat melihat pesan yang secara teknis tidak ditujukan untuk mereka. Anda bisa mengenkripsi data, tetapi itu banyak usaha hanya untuk mendapatkan minimal. Klien harus dapat mendekripsi paket obrolan pada akhirnya, dan mencegat paket ketika mereka meninggalkan klien akan menjadi tempat terbaik untuk melakukan pengintaian tersebut, sehingga kunci sudah tersedia untuk pengintai, hanya sedikit lebih sulit untuk menemukan.

Sangat penting bagi Anda untuk melewati obrolan Anda melalui server yang Anda kendalikan. Tidak perlu server game, ini bisa menjadi server khusus untuk menyalurkan obrolan, tetapi Anda ingin mengontrol peruteannya. Ini memungkinkan Anda untuk mengawasi perselisihan GM, memungkinkan Anda menegakkan permintaan pengguna untuk memblokir atau membisukan pengguna lain, itu memecahkan masalah yang mungkin Anda miliki dengan meninju NAT atau gangguan jaringan lainnya yang dapat Anda coba lakukan peer-to-peer chat, dan itu memberikan cukup penghalang untuk peretasan biasa (yang cenderung untuk diajak mengobrol) untuk menyelesaikan 90% masalah keamanan. Yang kira-kira sama baiknya dengan yang Anda dapatkan.


sumber
Apakah menggunakan HTTPS berfungsi? Mungkin pesan obrolan tidak sepenting latensi seperti sisa gim dan karenanya dapat dikirim dan diterima melalui HTTPS (misalnya menggunakan WebSockets) menggunakan mekanisme terpisah dari paket terkait game lainnya.
Justin
1
Anda bisa membuatnya bekerja, tetapi saya tidak mengerti mengapa akan bermanfaat untuk mengimplementasikan saluran samping tambahan itu, terutama ketika Anda mungkin masih ingin beberapa pesan obrolan diproses oleh server game karena alasan lain (mungkin itu sebenarnya adalah slash-command , mungkin mengandung beberapa item yang menghubungkan markup, dan lain-lain). Itu pilihan.
2

Jujur saya tidak 100% yakin apa yang Anda minta. Namun semoga yang berikut ini bermanfaat.

Jika Anda melihat planeshift , sebuah MMO open-source, Anda dapat melihat kode mereka dan melihat bagaimana mereka memutuskan untuk merancang sistem mereka. Ini tidak akan memberi Anda wawasan yang tepat tentang semua MMO tetapi implementasi yang paling mungkin serupa di berbagai game.

Berikut ini beberapa petunjuk untuk mengunduh sumbernya. Anda harus memeriksanya melalui SVN

Saya telah melihat dan jika Anda masuk src/client/gui/Anda akan melihat kelas ChatWindow. Mengurus mengirim pesan kembali dan keempat ke server untuk mengobrol dan juga mengurus riwayat masukan. Sepertinya mereka mengemas informasi dan mengirimkannya ke server untuk dikirimkan. Jadi saya membayangkan informasi obrolan ini disimpan di server mereka dan dengan demikian tidak dapat dijangkau oleh sembarang orang. Itu kecuali Anda bisa masuk ke database server untuk mengakses catatan obrolan. Saya tidak bisa membayangkan mereka bisa menjaga semuanya juga. Jika mereka menyimpan log obrolan, mungkin hanya untuk jangka waktu tertentu (Beberapa hari mungkin?)

Pokoknya, jawaban luas untuk pertanyaan luas. Saya benar-benar tidak bisa berbuat lebih baik dari itu tanpa pertanyaan yang lebih fokus. Jangan ragu untuk berkomentar jika Anda memiliki pertanyaan yang lebih sempit dan saya dapat mencoba menjawabnya.

Sunting1: Juga perhatikan bahwa di folder klien, Anda dapat menemukan dan mengautentikasi kelas klien. Ini menangani otentikasi klien, dll. Saya kira itu juga akan menangani keamanan terkait obrolan dalam hal mengautentikasi dirinya ke server obrolan. Mereka mungkin tidak memiliki server khusus untuk mengobrol. Jadi bisa saja server game yang juga menjalankan layanan obrolan untuk semua kliennya. Ini adalah sesuatu yang bisa Anda pahami dengan benar-benar mempelajari kode.

Untuk MMO yang lebih besar saya akan menaruh uang pada mereka memiliki server obrolan khusus hanya untuk mengurus obrolan antar pemain. (Sama seperti yang mereka lakukan untuk contoh).

Dean Knight
sumber
1

Kebanyakan MMO yang saya mainkan tidak menyimpan pesan untuk periode waktu yang lebih lama. Karena itu kemungkinan besar akan mengubah mereka menjadi GameCompany dengan lencana negatif seperti NSA. Kecuali, para pemain memiliki akses langsung ke database mereka.

Runescape memiliki pesan yang disimpan dalam cache, dan hanya tersedia untuk jumlah waktu yang kecil. Saya belum pernah mendengar ada yang dilarang karena fakta bahwa data tersebut telah disimpan. Jika seseorang harus melaporkan permainan lain untuk apa yang dia katakan. Dia harus cepat, hingga batas obrolan 500 ~ line-nya habis. Setelah itu semua pesannya akan dihapus. Di tempat yang paling ramai, di mana para pemain saling berteriak satu sama lain hingga 10 detik.

Pesan selalu dikirim melalui server, dan penyimpanan terjadi di server bukan klien. Jika tidak, Pemain A yang meretas klien, akan dapat memanipulasi susunan yang bertanggung jawab untuk obrolan dan secara harfiah menulis bahwa PEMAIN B menulis sesuatu yang lain. Setelah beberapa saat ia dapat melaporkan bahwa pemain untuk menulis sesuatu dan cache pemain lain mungkin tidak lagi menyimpan info tersebut.

Jika Anda menyimpan pesan di CLIENT, yang dilakukan oleh portal obrolan GaduGadu.pl, pengguna akan kehilangan kemampuan untuk memeriksa obrolan mereka di PC yang berbeda. Data yang dihasilkan oleh pengguna akan rentan terhadap orang ketiga. Sebagian besar di kafe internet publik. Atau di rumah teman yang mungkin membalas dendam pada teman lamanya.

Jika Anda menyimpannya di server Anda, Player B tidak mungkin mengakses data Player A dan sebaliknya. Perlu diingat bahwa mengatakan "bisakah pemain B mengakses data" adalah pertanyaan yang luas. Anda tidak akan pernah tahu apakah datanya aman, kecuali server Anda luring! Berikut ini sebuah contoh.

Mikolaj Marcisz
sumber
0

Menyimpan pesan hanya diperlukan untuk pengiriman ketika Anda ingin mengirimkannya di lain waktu. Misalnya ketika Anda ingin mengizinkan orang mengirim pesan ke pemain yang offline yang dikirim saat mereka masuk berikutnya atau ketika Anda ingin mengizinkan admin untuk membaca obrolan di lain waktu.

Ketika Anda tidak membutuhkan ini, penanganan obrolan dapat dan harus dilakukan sepenuhnya di memori.

Setiap pesan obrolan yang dikirim klien harus menyertakan beberapa informasi tentang penerima (publik, serikat, pesan pribadi ke pemain X). Server kemudian harus menentukan karakter yang diizinkan membaca pesan:

  • Untuk pesan publik, ini adalah karakter dalam radius tertentu di sekitar karakter pengiriman
  • Untuk pesan guild, ini adalah karakter yang memiliki guild yang sama dengan pengirim yang sedang online
  • Untuk pesan pribadi, itu karakter dengan nama yang sama, ketika online

Pesan kemudian harus dikirim ke klien yang mengontrol karakter ini.

Mengirim pesan ke klien yang tidak seharusnya menunjukkannya kepada pengguna adalah pemborosan lalu lintas dan melanggar prinsip "jangan pernah mempercayai klien".

Philipp
sumber
1
Pendekatan semacam itu menghilangkan kemampuan bagi administrator game untuk meninjau log obrolan di kemudian hari untuk menengahi perselisihan dan menangani keluhan penyalahgunaan. Jadi mungkin efisien, tetapi sebagai administrator MMO, itu mungkin bukan yang Anda inginkan. Semua obrolan harus dicatat dan ditahan dengan aman, setidaknya untuk jangka waktu tertentu sebelum diarsipkan / dibersihkan.
MrCranky
Saya setuju dengan apa yang Anda katakan tentang tidak mengirimkannya ke klien yang seharusnya tidak boleh membacanya; penyaringan harus dilakukan di sisi server.
MrCranky
@MrCranky Ketika Anda benar-benar ingin mencatat obrolan pribadi - yang mungkin melanggar undang-undang privasi di beberapa negara dalam beberapa kondisi - Anda masih dapat mencatatnya di beberapa file atau database, tetapi itu tidak terkait dengan siapa Anda mengirimnya. Jawabannya sudah diperbarui.
Philipp
1
Itu tidak pribadi jika Anda mengirimnya ke server game, dan EULA harus selalu menjelaskannya. Saya tidak berpikir Anda akan menemukan MMO di luar sana yang berpura-pura sebaliknya. Tidak ada interaksi pribadi saat pemain menggunakan game sebagai perantara; ini bukan pengalaman obrolan peer-to-peer, mereka berinteraksi dengan game.
MrCranky
1
Tidak ada harapan privasi dalam game online, hukum tidak berfungsi seperti itu.
Patrick Hughes