Làm thế nào trò chuyện nên được truyền và lưu trữ trong MMO?


8

Người chơi trong các trò chơi MMO thường có thể gửi tin nhắn qua các kênh khác nhau (riêng tư, công khai, bang hội, et cetera).

Làm cách nào để tôi truyền và lưu trữ dữ liệu này để ngăn người dùng bên ngoài không thể truy cập tin nhắn trò chuyện riêng tư của ai đó? Tôi nên lưu trữ dữ liệu trong nhật ký trò chơi tạm thời hoặc cơ sở dữ liệu?


3
Yêu cầu "làm thế nào để MMO làm điều đó" quá rộng và đòi hỏi kiến ​​thức bên trong phải trả lời bằng niềm tin. Tôi đã điều chỉnh câu hỏi của bạn để tập trung hơn vào cách bạn nên triển khai trò chuyện cho dự án của mình , với mục đích bảo vệ an ninh càng nhiều càng tốt.

Câu trả lời:


13

Bạn sẽ không bao giờ thực sự loại bỏ khả năng cho bên ngoài chặn các gói trò chuyện từ khách hàng và bạn không nên lo lắng quá nhiều, bởi vì khi bạn xây dựng MMO, bạn đang xây dựng một trò chơi, không phải là một thế mạnh công nghiệp nền tảng trò chuyện an toàn bảo mật.

Bạn nên thực hiện các tin nhắn trò chuyện như sau:

  • Máy khách truyền dữ liệu trò chuyện, ở mức tối thiểu bao gồm tin nhắn trò chuyện nhưng có lẽ cũng bao gồm thông tin về kênh hoặc nhóm (như trò chuyện công khai, trò chuyện bang hội, thì thầm người chơi, et cetera).
  • Máy chủ nhận được dữ liệu trò chuyện. Đầu tiên, nó ghi nhật ký, có thể ở đâu đó ngoại tuyến vì không cần phải lưu nó trong bộ nhớ lâu hơn mức cần thiết. Ghi nhật ký rất quan trọng và thường bị bỏ qua, nhưng nó cực kỳ hữu ích cho trọng tài GM và chẩn đoán pháp y. Khi bạn chạy MMO, bạn muốn đăng nhập mọi thứ .
  • Sau khi dữ liệu được ghi lại, máy chủ sẽ xác định ai sẽ nhận được tin nhắn trò chuyện và phát nó một cách thích hợp. Sau đó, máy chủ có thể thả dữ liệu còn lại trên sàn; nó không cần nó nữa.

Điểm dễ bị tổn thương nhất ở đây là việc truyền từ máy khách đến máy chủ ban đầu. Nếu ai đó rình mò các gói đó, họ có thể thấy các tin nhắn không dành cho kỹ thuật. Bạn có thể mã hóa dữ liệu, nhưng đó là rất nhiều nỗ lực chỉ để đạt được tối thiểu. Cuối cùng, khách hàng phải có thể giải mã các gói trò chuyện và chặn các gói khi họ rời khỏi máy khách sẽ là nơi tốt nhất để thực hiện việc rình mò nói trên, do đó, khóa này đã có sẵn cho người rình mò, chỉ khó tìm hơn một chút.

Điều rất quan trọng là bạn chuyển cuộc trò chuyện của mình thông qua một máy chủ mà bạn đang kiểm soát. Nó không cần phải là máy chủ trò chơi, nó có thể là một máy chủ chuyên dụng để trò chuyện kênh, nhưng bạn muốn kiểm soát việc định tuyến. Nó cho phép bạn giám sát các tranh chấp GM, nó cho phép bạn thực thi các yêu cầu của người dùng để chặn hoặc tắt tiếng người dùng khác, nó giải quyết các vấn đề bạn có thể gặp phải khi đấm NAT hoặc các shenanigans mạng khác mà bạn có thể cố gắng thực hiện trò chuyện ngang hàng và nó cung cấp đủ rào cản cho việc hack thông thường (mà trò chuyện ngang hàng dễ xảy ra) để giải quyết 90% các mối lo ngại về bảo mật. Đó là khoảng tốt như bạn sẽ nhận được.


Sử dụng HTTPS có hoạt động không? Có lẽ các tin nhắn trò chuyện không có độ trễ quan trọng như phần còn lại của trò chơi và do đó có thể được gửi và nhận qua HTTPS (ví dụ: sử dụng WebSockets) bằng cơ chế riêng biệt từ các gói liên quan đến trò chơi khác.
Justin

1
Bạn có thể làm cho nó hoạt động, nhưng tôi không hiểu tại sao việc triển khai kênh phụ bổ sung đó lại đáng giá, đặc biệt là khi bạn vẫn muốn một số tin nhắn trò chuyện được xử lý bởi máy chủ trò chơi vì những lý do khác (có lẽ chúng thực sự là các lệnh chém , có lẽ chúng chứa một số loại vật phẩm liên kết đánh dấu, et cetera). Đó là một lựa chọn mặc dù.

2

Tôi thành thật không chắc chắn 100% những gì bạn đang hỏi. Nhưng hy vọng sau đây là hữu ích.

Nếu bạn nhìn vào planeshift , một MMO nguồn mở, bạn có thể xem mã của họ và xem họ quyết định kiến ​​trúc hệ thống của họ như thế nào. Điều này sẽ không cung cấp cho bạn cái nhìn sâu sắc chính xác về tất cả các MMO nhưng rất có thể việc triển khai là tương tự trên các trò chơi khác nhau.

Dưới đây là một số hướng dẫn để tải về nguồn của họ. Bạn sẽ cần kiểm tra thông qua SVN

Tôi đã xem và nếu bạn đi vào, src/client/gui/bạn sẽ thấy một lớp ChatWindow. Nó đảm nhiệm việc gửi tin nhắn trở lại và thứ tư đến máy chủ để trò chuyện và nó cũng quan tâm đến lịch sử đầu vào. Có vẻ như họ đóng gói thông tin và gửi nó đến máy chủ để cung cấp. Vì vậy, tôi tưởng tượng thông tin trò chuyện này được lưu trữ trên máy chủ của họ và do đó không ai có thể truy cập được. Đó là trừ khi bạn có thể vào cơ sở dữ liệu máy chủ để truy cập hồ sơ trò chuyện. Tôi không thể tưởng tượng họ có thể giữ mọi thứ. Nếu họ giữ nhật ký trò chuyện thì có lẽ chỉ trong một khoảng thời gian nhất định (Có lẽ vài ngày?)

Dù sao, một câu trả lời rộng cho một câu hỏi rộng. Tôi thực sự không thể làm tốt hơn thế mà không có câu hỏi tập trung hơn. Hãy bình luận nếu bạn có nhiều câu hỏi hẹp hơn và tôi có thể thử trả lời chúng.

Edit1: Cũng lưu ý rằng trong thư mục máy khách, bạn có thể tìm và xác thực lớp. Điều này xử lý xác thực ứng dụng khách, v.v ... Tôi tưởng tượng nó cũng sẽ xử lý bảo mật liên quan đến trò chuyện về mặt xác thực chính nó vào một máy chủ trò chuyện. Họ có thể không có máy chủ chuyên dụng để trò chuyện. Vì vậy, nó có thể chỉ là máy chủ trò chơi cũng đang chạy các dịch vụ trò chuyện cho tất cả các khách hàng của mình. Đây là một cái gì đó bạn có thể tìm ra bằng cách thực sự nghiên cứu mã.

Đối với các MMO lớn hơn, tôi sẽ đặt tiền cho họ có các máy chủ trò chuyện chuyên dụng chỉ để chăm sóc trò chuyện giữa những người chơi. (Giống như họ làm ví dụ).


1

Hầu hết các MMO tôi đã chơi không lưu trữ tin nhắn trong một khoảng thời gian dài hơn. Bởi vì điều đó rất có thể sẽ biến chúng thành GameCompany với huy hiệu tiêu cực như NSA. Trừ khi, người chơi có quyền truy cập trực tiếp vào cơ sở dữ liệu của họ.

Runescape có các thông điệp được lưu trữ trong bộ nhớ cache và nó chỉ khả dụng trong một khoảng thời gian nhỏ. Tôi chưa bao giờ nghe nói về bất cứ ai bị cấm do thực tế là dữ liệu đó đã được lưu trữ. Nếu một người nên báo cáo một vở kịch khác cho những gì anh ta nói. Anh ta phải nhanh chóng, cho đến khi giới hạn trò chuyện 500 ~ dòng của anh ta được sử dụng hết. Sau thời gian đó tất cả tin nhắn của anh sẽ bị xóa. Ở nơi đông đúc nhất, nơi người chơi hét lên với nhau thì mất tới 10 giây.

Các tin nhắn luôn được gửi qua máy chủ và việc lưu trữ diễn ra tại máy chủ chứ không phải máy khách. Mặt khác, Người chơi A đã xâm nhập vào máy khách, sẽ có thể thao túng mảng chịu trách nhiệm trò chuyện và viết theo nghĩa đen là PLAYER B đã viết một cái gì đó khác. Sau một thời gian ngắn, anh ta có thể báo cáo rằng người chơi đã viết một cái gì đó và bộ nhớ cache của người chơi khác có thể không còn giữ thông tin đó nữa.

Nếu bạn lưu trữ các tin nhắn trên CLIENT, được thực hiện bởi một cổng trò chuyện GaduGadu.pl, người dùng sẽ mất khả năng kiểm tra các cuộc trò chuyện của họ trên các PC khác nhau. Dữ liệu do người dùng tạo sẽ dễ bị tổn thương bởi người thứ ba. Chủ yếu là trong các quán cà phê internet công cộng. Hoặc tại nhà bạn bè, những người có thể tìm cách trả thù người bạn cũ của mình.

Nếu bạn lưu trữ nó trên máy chủ của mình, Người chơi B không thể truy cập dữ liệu của Người chơi A và ngược lại. Hãy nhớ rằng "người chơi B có thể truy cập dữ liệu đó" là một câu hỏi rộng. Bạn không bao giờ có thể biết liệu dữ liệu có an toàn hay không, trừ khi máy chủ của bạn ngoại tuyến! Đây là một ví dụ.


0

Lưu trữ tin nhắn chỉ cần thiết để gửi khi bạn muốn gửi chúng sau đó. Ví dụ: khi bạn muốn cho phép mọi người gửi tin nhắn cho người chơi ngoại tuyến được gửi vào lần tiếp theo họ đăng nhập hoặc khi bạn muốn cho phép quản trị viên đọc trò chuyện sau đó.

Khi bạn không cần điều này, việc xử lý trò chuyện có thể và nên được thực hiện hoàn toàn trong bộ nhớ.

Mỗi tin nhắn trò chuyện mà khách hàng gửi phải bao gồm một số thông tin về người nhận (công khai, bang hội, tin nhắn riêng tư cho người chơi X). Sau đó, máy chủ sẽ xác định các ký tự được phép đọc tin nhắn:

  • Đối với tin nhắn công khai, đây là các ký tự trong bán kính cụ thể xung quanh ký tự gửi
  • Đối với tin nhắn bang hội, đây là những nhân vật có cùng bang hội với người gửi hiện đang trực tuyến
  • Đối với tin nhắn riêng tư, đó là ký tự cùng tên, khi nó trực tuyến

Sau đó, tin nhắn sẽ được gửi đến các máy khách điều khiển các ký tự này.

Gửi tin nhắn đến một khách hàng không được cho là hiển thị nó cho người dùng là một sự lãng phí lưu lượng truy cập và vi phạm nguyên tắc "không bao giờ tin tưởng khách hàng".


1
Cách tiếp cận như vậy sẽ loại bỏ khả năng các quản trị viên trò chơi xem xét nhật ký trò chuyện vào một ngày sau đó để phân xử các tranh chấp và xử lý các khiếu nại lạm dụng. Vì vậy, nó có thể hiệu quả, nhưng là một quản trị viên MMO, nó có thể không phải là những gì bạn muốn. Tất cả các cuộc trò chuyện phải được ghi lại và giữ an toàn, ít nhất là trong một khoảng thời gian được xác định trước trước khi nó được lưu trữ / thanh trừng.
MrCranky

Tôi đồng ý với những gì bạn nói về việc không gửi nó cho khách hàng mà không được phép đọc nó mặc dù; lọc nên được thực hiện phía máy chủ.
MrCranky

@MrCranky Khi bạn thực sự muốn đăng nhập trò chuyện riêng tư - điều này có thể vi phạm luật riêng tư ở một số quốc gia trong một số điều kiện - bạn vẫn có thể đăng nhập vào một số tệp hoặc cơ sở dữ liệu, nhưng điều đó không liên quan đến việc bạn gửi nó cho ai. Trả lời cập nhật, mặc dù.
Philipp

1
Sẽ không riêng tư nếu bạn gửi nó đến máy chủ trò chơi và EULA phải luôn làm rõ điều đó. Tôi không nghĩ rằng bạn sẽ tìm thấy bất kỳ MMO nào ngoài đó giả vờ khác. Không có tương tác riêng tư khi người chơi đang sử dụng trò chơi làm trung gian; đây không phải là trải nghiệm trò chuyện ngang hàng, họ đang tương tác với trò chơi.
MrCranky

1
Không có kỳ vọng về quyền riêng tư trong một trò chơi trực tuyến, luật pháp không hoạt động theo cách đó.
Patrick Hughes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.