Chúng tôi đang xây dựng một trò chơi cho Android, cần truy cập vào các dịch vụ web - vì vậy chúng tôi đã viết một API RESTful trong PHP chạy trên máy chủ của chính chúng tôi. API cung cấp là gì: tạo người dùng, đăng nhập, tải xuống trò chơi, truy xuất danh sách trò chơi, gửi số điểm ... v.v. Bây giờ tôi đang nghĩ, nếu một số người dùng có kinh nghiệm có định dạng URL của API - s/ông sẽ có thể vào thùng rác hệ thống bằng nhiều cách:bảo mật API REST có thể truy cập được từ Android
- tạo một kịch bản chạy & nó để tạo người dùng tự động - tôi nghĩ rằng tôi có thể ngăn chặn nó bằng cách CAPTCHA hoặc someting như thế. Nhưng một lần nữa, captcha sẽ làm phiền người chơi trò chơi.
- Nhật ký người dùng độc hại khi sử dụng trình duyệt của mình, tải xuống trò chơi & sau đó gửi điểm số theo ý muốn - tất cả bằng cách gọi API bằng cách chỉ cần nhập từ trình duyệt của mình. Tôi cho rằng người dùng độc hại bằng cách nào đó biết các url API để gọi - bằng cách đánh hơi khi ứng dụng đang thực hiện các yêu cầu HTTP.
- Tôi cần đảm bảo rằng các yêu cầu chỉ được thực hiện từ thiết bị Android đã cài đặt trò chơi. (Trò chơi sẽ được miễn phí)
Bây giờ Làm cách nào để ngăn chặn những hành vi lạm dụng như vậy?
Cảm ơn bạn rất nhiều, @ matthew-rudy :) Tôi có tạo 'khóa bí mật' cho mỗi người dùng không? Nếu sau đó, làm cách nào để phân phối nó? Nếu tôi gửi khóa bí mật cho ứng dụng sau khi đăng ký làm phản hồi, người ta có thể thực hiện cuộc gọi API đơn giản từ trình duyệt trên máy tính để bàn của mình và nhận khóa bí mật làm phản hồi. – giga
Trong cách tiếp cận của Matthew, khóa bí mật không bao giờ được gửi qua dây. Đó là "muối" được thêm vào url để tạo băm. Vì hàm băm là hàm một chiều nên người dùng không thể khôi phục khóa bí mật từ hàm băm. Nó sẽ yêu cầu người dùng dịch ngược APK và xem xét mã nguồn để tìm khóa. Bạn có thể sử dụng các kỹ thuật mã hóa để làm cho điều này trở nên khó khăn hơn, nhưng nó sẽ luôn luôn có thể cho một người nào đó tìm ra chìa khóa, cho đủ thời gian và động lực. –
thực sự là @JasonLeBrun, tôi đã thêm một ví dụ giả mã. Nhưng, giga, tôi đề nghị bạn tìm kiếm một khung công tác hiện có trong PHP, thay vì tạo ra khung của riêng bạn. Tôi chắc chắn phải có nhiều giải pháp hiện có. –