Làm cách nào để bảo vệ việc gửi điểm từ các trò chơi HTML5 đến máy chủ của tôi


13

Trên phụ trợ tôi đang sử dụng java. Tôi có một trò chơi trong HTML5; Khi người dùng hoàn thành nó, tôi sẽ gửi một cuộc gọi Ajax để lưu điểm vào cơ sở dữ liệu. Giờ đây, ai đó có thể dễ dàng sử dụng các công cụ như Fiddler và fireorms để sửa đổi yêu cầu ajax này và gửi điểm số cao hơn nhiều đến máy chủ. Làm thế nào để tôi chắc chắn rằng người dùng không thể thao túng điểm số!

Câu trả lời:


18

Đừng chỉ gửi một số nguyên cho máy chủ. Gửi một bộ sưu tập các số liệu thống kê trò chơi có thể được sử dụng để xác minh điểm số là thực tế. Hoặc bạn có thể thực hiện một số khóa chia sẻ trước để tính điểm. Bạn có thể gửi điểm số và chỉ số gia tăng trong suốt trò chơi và đảm bảo rằng mức tăng là hợp lý.

Tuy nhiên, tôi sẽ không lo lắng quá nhiều về nó. Những gợi ý ở trên sẽ làm cho nó khó khăn hơn, nhưng không phải là không thể gửi điểm giả. Tuy nhiên, nếu bạn chỉ làm cho nó hơi khó khăn thì đại đa số những người chơi trò chơi của bạn sẽ không hứng thú với việc cố gắng lừa dối nó.

Hãy cẩn thận về cách bạn cho phép trò chơi của bạn giao tiếp với máy chủ của bạn. Bạn không muốn trò chơi của bạn trở thành một điểm vào máy chủ của bạn để hack. Hãy chắc chắn rằng bạn luôn xác nhận đầu vào của bạn và không bao giờ tin tưởng khách hàng.


6
Xem programmers.stackexchange.com/questions/150127/...gamedev.stackexchange.com/questions/37392/... để hoàn chỉnh với "Không bao giờ tin tưởng vào khách hàng"
dievardump

@ Byte56 không có hình thức mã hóa hoặc mã hóa nào sẽ bảo vệ mã của bạn khỏi trình gỡ lỗi đang được sử dụng để sửa đổi dữ liệu trò chơi trong khi chơi. Nếu trò chơi xảy ra trên máy khách, về cơ bản không thể ngăn chặn hình thức gian lận này. Trình duyệt hỗ trợ Javascript không phải là thiết bị điện toán đáng tin cậy.
MarkR

10

Như Byte56 đã nói: "không bao giờ tin tưởng khách hàng", nhưng:

Không bao giờ tin tưởng khách hàng có giá:
Có tất cả các trò chơi được chơi trên máy chủ sẽ làm tăng chi phí cơ sở hạ tầng của bạn rất nhiều.

Giả sử hầu hết người chơi sẽ không gian lận
và điểm cao nhất sẽ ổn định sau một thời gian và ngừng thay đổi nhiều

Có một cách giữa.

Ghi lại các trò chơi (trên máy khách).
(Tùy thuộc vào loại trò chơi có thể siêu dễ (ví dụ: cờ vua) hoặc hơi phức tạp (ví dụ: FPS nhiều người chơi),
nhưng nó luôn luôn có thể thực hiện được.)

Khi một người chơi kết thúc một trò chơi chỉ cần gửi điểm số.
Nếu điểm nằm trong một phạm vi nhất định ở đầu (ví dụ: top 1% hoặc top 5), hãy
yêu cầu dữ liệu được ghi từ người chơi
và phát lại trò chơi đó trên máy chủ.
Nếu điểm số phù hợp, chấp nhận điểm số.

Bằng cách này, bạn không cần bất kỳ tài nguyên phía máy chủ bổ sung nào cho hầu hết các lần phát,
nhưng có thể đảm bảo điểm số cao nhất là hợp lệ.


2
Nói cách khác, ai quan tâm nếu họ gian lận cho bất cứ điều gì ngoài điểm số cao nhất (tại sao họ vẫn làm điều đó?) Vì vậy đó là những người duy nhất bạn cần xác nhận.
jhocking

4

Đừng lo về nó; bảo vệ khỏi tất cả các cuộc tấn công về cơ bản là không thể nếu bạn tin tưởng khách hàng. Nếu không ai sử dụng Fiddler, v.v., để sửa đổi yêu cầu AJAX, họ có thể chỉ cần kích hoạt trình gỡ lỗi JS và sửa đổi dữ liệu trò chơi của bạn để tự cung cấp 1000 mạng, v.v. hoặc sửa đổi mã của bạn hoặc thực hiện 100 điều khác mà bạn chưa từng nghĩ tới.

Tôi đã viết một trò chơi như vậy vài năm trước, và theo hiểu biết tốt nhất của tôi, không ai lừa dối theo cách này. Không có giải thưởng, ngoại trừ có tên của bạn trên bảng điểm.


4

Giảm động lực xã hội để gian lận bằng cách sử dụng bảng xếp hạng xã hội (gian lận chỉ khiến bạn trở nên tốt với một số ít bạn bè, điều đó không làm hỏng nó cho tất cả mọi người).

Xác minh trên máy chủ. Joel Poloney đã có một bài viết tốt về các kỹ thuật trong Nhà phát triển trò chơi 2012 Tháng 9 "Quy mô trò chơi trực tuyến của bạn"


2

Khi bạn muốn tạo một trò chơi trực tuyến chống gian lận, bạn cần xử lý tất cả logic trò chơi trên máy chủ. Mọi thứ xảy ra ở phía máy khách đều có thể được kiểm soát và thao tác bởi người dùng. Có những kỹ thuật như mã hóa hoặc mã hóa bạn có thể thử, nhưng cuối cùng tất cả chỉ là bảo mật thông qua che khuất có thể bị phá vỡ bởi một người đủ xác định.

Chắc chắn, một trò chơi chạy trên máy chủ phức tạp hơn rất nhiều để phát triển, đòi hỏi nhiều tài nguyên hơn về phía máy chủ và độ trễ mạng gây bất lợi cho trải nghiệm trò chơi (đặc biệt là các trò chơi có nhịp độ nhanh), nhưng đó là cách duy nhất để có hiệu quả ngăn người chơi gian lận.


Ngay cả điều đó sẽ không ngăn chặn tất cả sự gian lận - chỉ là thứ "ừ, tôi hợp pháp có một số tiền trị giá". Vì một cái gì đó phải chạy trên máy khách, chúng kết thúc với một số điều khiển bất kể. Ít nhất, bất kỳ khách hàng nào - đặc biệt là trình duyệt web - đều có thể viết được.
cHao
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.