Càng trở nên phổ biến thì ứng dụng càng có thể thu hút sự chú ý không mong muốn của những người dùng độc hại muốn lạm dụng ứng dụng. Chủ đề này mô tả các đề xuất mà bạn nên sử dụng để ngăn chặn những cuộc tấn công đến việc tích hợp tính năng thanh toán và giảm tác động của hành vi sử dụng sai mục đích trong ứng dụng của mình.
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à ra mắt 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 hàng 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 hàng 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. - Hãy sử dụng các điểm cuối
Purchases.products:get
hoặcPurchases.subscriptionsv2:get
trong API Nhà phát triển Google Play để xác minh với Google rằng giao dịch mua hàng là hợp lệ. - Nếu giao dịch mua hàng là hợp lệ và chưa được sử dụng trước đây thì bạn có thể cấp quyền mộ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
linkedPurchaseToken
được đặt trongPurchases.subscriptionsv2:get
, bạn cũng nên xoálinkedPurchaseToken
khỏi cơ sở dữ liệu và thu hồi quyền đã cấp cholinkedPurchaseToken
để đả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 hàng. - 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 hàngPENDING
một cách phù hợp. Nếu số giao dịch mua hàngCANCELED
tăng mạnh, có thể bạn sẽ cấp quyền khi giao dịch mua hàng vẫn ở trạng tháiPENDING
. Bạn có thể xem thêm thông tin trong mục 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
Purchases.products:consume
API Nhà phát triển Play trên máy chủ phụ trợ bảo mật. Để xác nhận 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 đến một trong hai cách sau:Purchases.products:acknowledge
hoặcPurchases.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 đó đã cung 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ỷ. Đố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 cài đặ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 API giao dịch mua vô hiệu: 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 API giao dịch mua để 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.