Google Play luôn nỗ lực đảm bảo an toàn cho cả người dùng và nhà phát triển. Chúng tôi hiểu rằng việc xây dựng một hoạt động kinh doanh ứng dụng phát triển thịnh vượng phụ thuộc vào một nền tảng đáng tin cậy – một nền tảng đảm bảo lợi tức đầu tư của bạn bằng cách chủ động chống lại các đối tượng xấu.
Tài liệu này mô tả các đề xuất để ngăn chặn các cuộc tấn công vào hệ thống thanh toán được tích hợp và giảm thiểu tác động của hành vi sai trái trong ứng dụng của bạn.
Cải thiện các biện pháp bảo vệ
Các API và công cụ sau đây có thể giảm thiểu rủi ro trong ứng dụng của bạn:
- Voided Purchases API: Thu hồi quyền truy cập vào các đơn đặt hàng vô hiệu.
- Mã tài khoản bị làm rối: Giúp phát hiện khi nhiều thiết bị thực hiện giao dịch mua trên cùng một tài khoản trong một khoảng thời gian ngắn.
- Mức tiêu thụ phụ trợ: Các công cụ như Purchases.products:consume sẽ chuyển logic nghiệp vụ sang các phụ trợ bảo mật của bạn, ngăn chặn hành vi giả mạo phía máy khách. Ngoài việc sử dụng các API nền tảng này, hãy áp dụng các phương pháp hay nhất sau đây để bảo mật hơn nữa các hoạt động tích hợp của bạn trước hành vi truy cập trái phép.
Ngăn chặn hành vi giả mạo vị trí
Google Play cung cấp các biện pháp bảo vệ tích hợp để ngăn chặn các đối tượng xấu sử dụng vị trí giả mạo nhằm khai thác chênh lệch tiền tệ theo khu vực (còn gọi là giả mạo vị trí), lợi dụng các chương trình khuyến mãi và ưu đãi cho gói thuê bao, cũng như tìm cách lừa đảo bằng thẻ quà tặng.
Di chuyển logic nhạy cảm vào phần phụ trợ
Tuỳ vào giới hạn thiết kế ứng dụng, hãy di chuyển dữ liệu nhạy cảm và logic sang một máy chủ phụ trợ mà bạn kiểm soát. Bạn càng có nhiều dữ liệu và logic trong một thiết bị giao diện người dùng, dữ liệu đó càng dễ bị sửa đổi hoặc can thiệp.
Ví dụ: một trò chơi cờ trực tuyến phải xác thực tất cả nước đi trong phần phụ trợ thay vì tin tưởng rằng giao diện người dùng luôn gửi các nước đi hợp lệ.
Hơn nữa, nếu bạn phát hiện thấy lỗ hổng hoặc vấn đề bảo mật, tuỳ thuộc vào thiết kế hệ thống, việc gỡ lỗi, khắc phục và triển khai bản cập nhật ở phần phụ trợ có thể dễ dàng hơn là ở giao diện người dùng.
Xác minh giao dịch mua trước khi cấp quyền
Một trường hợp dữ liệu và logic nhạy cảm đặc biệt cần được xử lý trong phần phụ trợ là khi xác minh và xác nhận giao dịch mua hàng. Sau khi người dùng thực hiện giao dịch mua hàng, bạn nên:
- Gửi purchaseToken tương ứng đến phần phụ trợ. Điều này có nghĩa là bạn nên giữ một bản ghi về tất cả các giá trị purchaseToken cho mọi giao dịch mua hàng.
- Xác minh rằng giá trị purchaseToken của giao dịch mua hiện tại không khớp với bất kỳ giá trị purchaseToken nào trước đó. purchaseToken là giá trị duy nhất trên tổng thể, vì vậy, bạn có thể sử dụng giá trị này làm khoá chính trong cơ sở dữ liệu một cách an toàn.
- Sử dụng các điểm cuối Purchases.products:get hoặc Purchases.subscriptionsv2:get trong Google Play Developer API để xác minh bằng Google rằng giao dịch mua là hợp lệ.
- Nếu giao dịch mua là hợp lệ và chưa được sử dụng trước đây thì bạn có thể cấp quyềnmột cách an toàn cho mặt hàng trong ứng dụng hoặc gói thuê bao.
- Đối với các gói thuê bao, khi bạn đặt linkedPurchaseToken trong Purchases.subscriptionsv2:get, bạn cũng nên xoá linkedPurchaseToken khỏi cơ sở dữ liệu và thu hồi quyền được cấp cho linkedPurchaseToken để đảm bảo rằng nhiều người dùng không được cấp quyền cho cùng một giao dịch mua.
- Bạn chỉ nên cấp quyền khi trạng thái giao dịch mua là PURCHASED và đảm bảo xử lý giao dịch mua PENDING một cách phù hợp. Nếu số giao dịch mua BỊ HUỶ tăng đột biến, có thể bạn sẽ cấp quyền khi giao dịch mua vẫn ở trạng thái ĐANG CHỜ XỬ LÝ. Bạn có thể xem thêm thông tin trong phần Xử lý giao dịch đang chờ xử lý.
Sau khi cấp quyền, nếu bạn muốn tiêu thụ và xác nhận một sản phẩm tiêu dùng, hãy sử dụng API Nhà phát triển Play Purchases.products:consume trên máy chủ phụ trợ bảo mật. Để xác nhận một sản phẩm không phải hàng tiêu dùng hoặc một gói thuê bao, hãy gọi điểm cuối API Nhà phát triển Play liên quan, có thể là Purchases.products:acknowledge hoặc Purchases.subscriptions:acknowledge trên máy chủ phụ trợ bảo mật của bạn. Bạn cần xác nhận vì ứng dụng này sẽ thông báo cho Google Play rằng người dùng đã được cấp quyền cho giao dịch mua hàng. Bạn nên xác nhận giao dịch mua hàng ngay sau khi cấp quyền.
Xin lưu ý rằng mặc dù bạn có thể xác nhận hoặc tiêu thụ giao dịch mua hàng ở phía máy khách thông qua ứng dụng, nhưng các API phía máy chủ sẽ cung cấp thêm biện pháp bảo vệ chống lại các vấn đề như kết nối mạng kém và hoạt động độc hại. Ví dụ: hãy cân nhắc xem người dùng có mua mặt hàng từ ứng dụng của bạn nhưng họ bị mất kết nối mạng trong khi giao dịch mua hàng đang được xác thực hay không. Nếu không có xác nhận của máy chủ, họ có thể cần đăng nhập lại thông qua ứng dụng để hoàn tất quá trình xác nhận. Ngược lại, nếu người dùng không đăng nhập lại trong vòng 3 ngày, giao dịch mua hàng sẽ tự động được hoàn tiền do không có xác nhận mua hàng. Hoạt động xác nhận của máy chủ sẽ ngăn trường hợp này bằng cách gửi xác nhận ngay khi Google Play thông báo cho máy chủ rằng giao dịch mua hàng là hợp lệ.
Để biết thêm thông tin về việc xác nhận mua hàng và tiêu thụ, hãy xem phần Xử lý giao dịch mua hàng.
Bảo vệ nội dung đã mở khoá
Để ngăn người dùng độc hại phân phối lại nội dung đã mở khoá, không gói nội dung đó trong tệp APK. Thay vào đó, hãy thực hiện một trong những thao tác sau:
- Sử dụng dịch vụ theo thời gian thực để phân phối nội dung, chẳng hạn như nguồn cấp nội dung. Việc phân phối nội dung thông qua dịch vụ theo thời gian thực cũng cho phép bạn cập nhật nội dung.
- Sử dụng một máy chủ từ xa để phân phối nội dung. Khi cung cấp nội dung từ một máy chủ từ xa hoặc một dịch vụ theo thời gian thực, bạn có thể lưu trữ nội dung đã mở khoá trong bộ nhớ của thiết bị hoặc lưu trữ nội dung đó trên thẻ SD của thiết bị. Nếu lưu trữ nội dung trên thẻ SD, hãy đảm bảo rằng bạn mã hoá nội dung và sử dụng một khoá mã hoá dành riêng cho thiết bị.
Phát hiện và xử lý giao dịch mua vô hiệu
Giao dịch mua vô hiệu là các giao dịch mua đã bị huỷ, thu hồi hoặc hoàn tiền. Nếu một giao dịch mua vô hiệu trước đó đã cấp các mặt hàng trong ứng dụng hoặc nội dung khác cho một người dùng, bạn có thể sử dụng API Giao dịch mua vô hiệu để biết lý do tại sao giao dịch mua vô hiệu cùng bất kỳ nội dung liên kết nào mà bạn có thể thu hồi.
Giao dịch mua và gói thuê bao trong ứng dụng có thể vô hiệu vì nhiều lý do, bao gồm:
- Giao dịch mua bị người dùng, hoặc nhà phát triển, hoặc Google huỷ (bao gồm cả giao dịch mua tự động huỷ mà không được xác nhận). Đối với các gói thuê bao, hãy lưu ý rằng huỷ ở đây đề cập tới việc huỷ giao dịch mua của gói thuê bao, chứ không phải huỷ gói thuê bao.
- Giao dịch mua được hoàn tiền.
Nhà phát triển ứng dụng sẽ huỷ hoặc hoàn tiền cho đơn đặt hàng của người dùng và kiểm tra tuỳ chọn "thu hồi" trong bảng điều khiển. Dựa trên lý do mà giao dịch vô hiệu và dựa vào dữ liệu hành vi của người dùng trước đó, bạn có thể đưa ra quyết định hành động. Chúng tôi đề xuất bạn triển khai một hoặc nhiều hành động sau:
Thu hồi dữ liệu: Khi một giao dịch mua vô hiệu, bạn có thể thu hồi các mục chưa sử dụng về tình trạng như chưa từng được mua. Ví dụ: Nếu một giao dịch mua bằng tiền trong trò chơi trở nên vô hiệu, bạn có thể thu hồi số tiền trong trò chơi đã được cấp cho người dùng. Trong trường hợp người dùng đã chi tiêu số tiền trong trò chơi này, hãy xem xét việc đặt số dư thành âm và hạn chế hoạt động trong ứng dụng cũng như giao dịch mua trong tương lai cho đến khi số dư dương trở lại.
Đưa ra nhiều biện pháp cảnh cáo: Cân nhắc thực hiện các biện pháp không quá quyết liệt đối với người vi phạm lần đầu, chẳng hạn như hiển thị cảnh báo trong ứng dụng. Đối với những người tái phạm, hãy cân nhắc các biện pháp khắt khe hơn.
Tạm thời vô hiệu hoá các giao dịch mua: Tương tự như việc đưa ra nhiều biện pháp cảnh cáo, hãy cân nhắc về việc vô hiệu hoá giao dịch mua của người dùng có giao dịch mua vô hiệu cho đến khi bạn có thể điều tra kỹ hơn về lý do các giao dịch mua này trở nên vô hiệu.
Chặn truy cập tạm thời hoặc vĩnh viễn vào ứng dụng: Đối với các trường hợp nghiêm trọng khi người dùng lặp lại hoạt động độc hại, hãy xem xét phương án không cho phép truy cập vào ứng dụng tạm thời hoặc vĩnh viễn.
Thường xuyên thực hiện các lệnh gọi đến Voided Purchases API: Khi bạn phát hiện một hoặc nhiều giao dịch mua vô hiệu, hãy cân nhắc việc thực hiện các lệnh gọi thường xuyên hơn tới Voided Purchases API để huỷ bỏ các giao dịch mua trước khi người dùng có thể tiêu dùng mặt hàng. Bạn có thể tìm thêm thông tin về hạn mức API Giao dịch mua vô hiệu trong tài liệu về API Giao dịch mua vô hiệu.
Giúp Google phát hiện hành vi gian lận trước khi hành vi đó xảy ra
Một số loại hành vi gian lận có liên quan đến việc người dùng độc hại tạo nhiều Tài khoản Google và tài khoản trong ứng dụng để che giấu hoạt động của họ.
Sử dụng các phương thức setObfuscatedAccountId và setObfuscatedProfileId trong trình tạo cho BillingFlowParams để giúp Google liên kết Tài khoản Google với tài khoản trong ứng dụng.
Google sử dụng dữ liệu này để phát hiện hành vi đáng ngờ và chặn một số loại giao dịch gian lận trước khi các giao dịch này hoàn tất.
Biện pháp xử lý hành vi vi phạm nhãn hiệu và bản quyền
Nếu bạn đang sử dụng một máy chủ từ xa để phân phối hoặc quản lý nội dung, hãy yêu cầu ứng dụng xác minh trạng thái giao dịch mua của nội dung đã mở khoá mỗi khi người dùng truy cập vào nội dung. Yêu cầu này cho phép bạn thu hồi quyền sử dụng khi cần thiết và giảm thiểu hành vi vi phạm bản quyền. Nếu bạn thấy nội dung của mình được phân phối lại trên Google Play, hãy nhớ hành động nhanh chóng và quyết đoán. Để biết thêm thông tin, hãy xem trang Câu hỏi thường gặp về bản quyền trong Trung tâm trợ giúp về bản quyền.