2010-03-30 26 views
8

Tôi đang làm việc trên các trò chơi sử dụng javascript một số html và css, và tôi đã tự hỏi liệu có cách nào để bảo vệ trò chơi để người dùng không thể chỉ gọi game.php? Result = victory để hoàn thành trò chơi và kiếm được một số điểm.Làm thế nào để tạo một trò chơi an toàn trong javascript?

Hiện tại, đây là giải pháp tôi có.

  • Đối với một trò chơi may rủi, bắt đầu trang với kết quả đã được tại chỗ, giành chiến thắng hoặc lỏng, sau đó chỉ cần làm một số hình ảnh động để hiển thị nó, nhưng tất cả số điểm và giành chiến thắng/stuff lỏng được thực hiện phía máy chủ.

  • Đối với một trò chơi chiến đấu, chỉ cần nhận được hành động từ cuộc gọi javascript, và làm việc tính toán thiệt hại, phản ứng của oponent trên máy chủ và chỉ gửi lại dữ liệu.

nhưng giải pháp cuối cùng ngụ ý rằng tôi sẽ phải gửi hành động mỗi lần người dùng làm bất cứ điều gì. Điều này có thể làm việc cho một lượt của trò chơi chiến đấu lần lượt, nhưng tôi nghĩ rằng nó sẽ được làm chậm cho bất kỳ loại khác của trò chơi. Vì vậy, câu hỏi của tôi là, có một số loại cách an toàn tôi có thể chuẩn bị javascript của tôi để đảm bảo thông tin được gửi đi.

Trả lời

13

Cách duy nhất để đảm bảo an toàn khi có tất cả tính toán và xác thực xảy ra ở phía máy chủ. Đó là cách nó được thực hiện trên khá nhiều trò chơi trực tuyến. Các khách hàng không bao giờ có thể được tin cậy trong giao tiếp trực tuyến và bạn phải luôn luôn đảm bảo về phía máy chủ mà người dùng thực sự đang làm một cái gì đó hợp lệ. (Về lý thuyết, trong thực tế, bạn phải tin tưởng khách hàng phần nào để bù đắp trễ và giảm tải một số công cụ không tới hạn cho phía khách hàng).

Vì lý do này, javascript không phải là một ngôn ngữ rất tốt để phát triển trò chơi trực tuyến, vì mọi hành động cần phải được xử lý và xác thực bởi máy chủ. Đối với các ngôn ngữ lập trình khác, nó không phải là một vấn đề lớn như vậy, bởi vì bạn có thể xây dựng các giao thức truyền thông của riêng bạn bằng cách sử dụng TCP/IP cho máy chủ và máy khách. Tuy nhiên, đối với javascript không có khả năng như vậy, bởi vì bạn phải dựa vào giao thức HTTP và trình xử lý XMLHTTPRequest, điều này tạo ra một giao tiếp máy khách-máy chủ không hiệu quả. Như bạn đã nói, bạn luôn có thể làm giao diện trong javascript, nhưng để bảo mật, bạn vẫn cần phải thực hiện nhiều thứ ở phía máy chủ và điều này chắc chắn không hoạt động cho các trò chơi yêu cầu điều khiển hành động định hướng nhiều hơn.Vì vậy, bạn đang khá hạn chế để biến các trò chơi dựa trên, nếu bạn cần sự an toàn.

+0

cảm ơn cho câu trả lời đầy đủ :) Tôi đoán tôi sẽ dính vào lần lượt lần lượt và các trò chơi cơ hội sau đó. – rnaud

1

Không, không có cách nào.
Có gì sai khi gửi hành động của người dùng đến máy chủ?

+1

Vâng i' m nghĩ về kết nối di động và kết nối thấp, tôi muốn tránh tải nội dung sau mỗi nửa giây. – rnaud

2

Bạn có thể làm một số nội dung để ngăn chặn người dùng ngây thơ, nhưng có lẽ không phải tất cả mọi người. Tất cả phụ thuộc vào cách động cơ của người đó là "tấn công" trò chơi của bạn. Vào cuối ngày, người dùng có thể sử dụng trình gỡ lỗi javascript để xem chính xác mã của bạn đang làm gì và sao chép nó. Ngay cả khi bạn gửi lại mọi hành động trò chơi, người dùng vẫn có thể tái tạo điều đó. Nếu bạn không cẩn thận về những hành động mà người dùng có thể thực hiện, họ có thể gửi lại các hành động sẽ không thể nếu họ kiểm soát trò chơi bằng sơ đồ điều khiển mặc định.

2

Không được có URL cho chiến thắng. Trong trò chơi, khách hàng nên gửi hành động của người dùng và nếu họ đã thắng, máy chủ sẽ chuyển hướng họ đến trang chiến thắng.

Không tính toán/bổ ích nên được thực hiện trên trang chiến thắng, nếu có.

1

Điều này có được coi là một tùy chọn không? (Trả lời muộn)

Chuyển những thứ quan trọng (những thứ bạn không muốn bị tấn công) sang một trình phát flash ẩn bên trong, hoạt động như bộ lưu trữ biến quan trọng, máy tính (ví dụ: Life point) và "communicator" đến sever cho dữ liệu trò chơi đó.

Nó chắc chắn an toàn hơn sau đó là JavaScript. Nhưng vẫn; Nó luôn luôn là tốt nhất để giả định phía khách hàng của bạn là 100% không an toàn. (Ngay cả trong C++ trò chơi, lol: hacker)

Tuy nhiên, bằng cách chuyển lưu lượng dữ liệu trò chơi để flash, bạn có thể sử dụng một số chức năng thông tin liên lạc chi tiết thú vị của nó, ví dụ như: P2P =)

+0

Đây là một lựa chọn rất thú vị mà tôi chưa từng nghĩ đến. Tôi không thực sự có nhiều kiến ​​thức về AS, nhưng nó sẽ hoạt động như thế nào? –

+1

@Angelo R. Liên kết có thêm chi tiết về liên kết AS3 với JS: http://www.hardcode.nl/archives_155/article_334-call-javascript-function-from-as3-and-viceversa. Để đặt nó ngắn, cả hai bên có thể chạy các cuộc gọi chức năng với nhau. Bằng cách buộc, lưu lượng dữ liệu quan trọng để chạy qua flash và do đó máy chủ. Bạn có thể biến flash thành bộ nhớ biến 'bảo mật' đồng bộ với máy chủ, với javascript là 'hiển thị dữ liệu'. Tuy nhiên: Lưu ý rằng flash không phải là bằng chứng đánh lừa 100%, nhưng chắc chắn sẽ khó dịch hơn so với Javascript. – PicoCreator

+0

Cảm ơn vì điều này, nó sẽ là một thú vị đọc .. và có thể dự án –

Các vấn đề liên quan