Một vài điều cần lưu ý ở đây.
Đầu tiên, yêu cầu máy chủ của bạn cho một thứ như thế này phải là POST, chứ không phải GET. Chỉ các yêu cầu GET phải là ngẫu nhiên, và không thực hiện như vậy thực ra là a violation of the HTTP specification.
Thứ hai, những gì bạn đang xem ở đây là số Vấn đề về sự tin cậy của khách hàng. Bạn có để tin tưởng khách hàng gửi điểm hoặc thông tin về khoảng thời gian trò chơi khác đến máy chủ, nhưng bạn không muốn khách hàng gửi dữ liệu bất hợp pháp. Ngăn chặn các hành động không được phép là dễ dàng - nhưng ngăn chặn dữ liệu phát hôi trong một hành động được phép được phép có nhiều vấn đề hơn.
Ben S làm cho một điểm tuyệt vời về cách bạn thiết kế giao thức truyền thông giữa máy khách và máy chủ như thế này. Cho phép các giá trị điểm được gửi dưới dạng dữ liệu đáng tin cậy thường sẽ là một ý tưởng tồi. Nó thích hợp hơn để chỉ ra rằng một hành động đã diễn ra, và để cho máy chủ tìm ra số điểm cần được chỉ định, nếu có. Nhưng đôi khi bạn không thể vượt qua điều đó. Hãy xem xét kịch bản của một trò chơi đua xe. Khách hàng có để gửi thời gian của người dùng và không thể bị tóm tắt thành một số cuộc gọi khác như "completedLevelFour". Vậy bây giờ bạn muốn làm gì?
Cách tiếp cận mã thông báo mà Ahmet và Dean gợi ý là âm thanh - nhưng nó không hoàn hảo. Thứ nhất, mã thông báo vẫn còn phải được truyền tới máy khách, điều này có nghĩa là nó có thể phát hiện được bởi kẻ tấn công tiềm năng và có thể được sử dụng độc hại. Ngoài ra, điều gì sẽ xảy ra nếu API trò chơi của bạn cần phải là quốc gia? Điều đó có nghĩa là xác thực mã thông báo dựa trên phiên. Và bây giờ bạn vào sâu, ruột đen của vấn đề Trust Client.
Có rất ít bạn có thể làm cho nó trở nên dễ dàng 100%. Nhưng bạn có thể làm cho nó rất bất tiện để gian lận. Hãy xem xét mô hình bảo mật của Facebook (mọi yêu cầu API được ký). Điều này là khá tốt và yêu cầu kẻ tấn công thực sự đào sâu vào mã phía máy khách của bạn trước khi họ có thể tìm ra cách giả mạo một reqeust.
Một cách tiếp cận khác là phát lại trên máy chủ. Giống như cho một trò chơi đua xe, thay vì chỉ có một giá trị "thời gian" được gửi đến máy chủ, có các trạm kiểm soát cũng ghi lại thời gian và gửi tất cả. Thiết lập mức tối thiểu thực tế cho mỗi khoảng thời gian và xác minh trên máy chủ rằng tất cả dữ liệu này nằm trong giới hạn được thiết lập.
Chúc may mắn!
Nguồn
2009-11-16 21:40:01
Ứng dụng của bạn nên biết hành động đó có được phép hay không. – Gumbo
Ai đó có thể chỉ gửi chuỗi các yêu cầu đến máy chủ cho phép họ truy cập vào điểm mà hành động đó được cho phép mặc dù – user105033
Sau đó, máy chủ của bạn không thực sự cung cấp điểm. –