Wraz z rosnącą popularnością aplikacji może ona przyciągać uwagę złośliwych użytkowników, którzy mogą chcieć z niej korzystać w niewłaściwy sposób. W tym artykule znajdziesz zalecenia, które pomogą Ci zapobiec atakom na integrację płatności i zmniejszy wpływ nadużyć na aplikację.
Przenoszenie wrażliwej logiki na backend
W miarę możliwości przenoś dane wrażliwe i logikę na serwer sterowany przez Ciebie. Im więcej danych i logiki jest na urządzeniu frontendowym, tym bardziej jest ono podatne na modyfikacje i manipulowanie.
Na przykład gra w szachy online powinna weryfikować wszystkie ruchy na poziomie backendu, zamiast ufać, że frontend zawsze wysyła prawidłowe ruchy.
Jeśli znajdziesz luki w zabezpieczeniach lub problemy z bezpieczeństwem, w zależności od projektu systemu może być łatwiej debugować, naprawiać i wdrażać aktualizacje w backendzie, a nie w interfejsie.
Weryfikowanie zakupów przed przyznawaniem uprawnień
Szczególnym przypadkiem danych wrażliwych i logiki, które powinny być obsługiwane na zapleczu, jest weryfikacja i potwierdzenie zakupu. Gdy użytkownik dokona zakupu, wykonaj te czynności:
- Wyślij odpowiedni
purchaseToken
do backendu. Oznacza to, że w przypadku wszystkich zakupów należy przechowywać rekordy wszystkich wartościpurchaseToken
. - Sprawdź, czy wartość
purchaseToken
dla bieżącego zakupu nie jest taka sama jak żadna z poprzednich wartościpurchaseToken
. WartośćpurchaseToken
jest globalnie unikalna, więc możesz bezpiecznie używać jej jako klucza głównego w bazie danych. - Użyj punktów końcowych
Purchases.products:get
lubPurchases.subscriptionsv2:get
interfejsu Google Play Developer API, aby zweryfikować u Google, czy zakup jest uzasadniony. - Jeśli zakup jest uzasadniony i nie został wykorzystany w przeszłości, możesz bezpiecznie przyznać uprawnienia do produktu w aplikacji lub subskrypcji.
- W przypadku subskrypcji, gdy w
Purchases.subscriptionsv2:get
ustawiona jest wartośćlinkedPurchaseToken
, musisz też usunąć z bazy danych wartośćlinkedPurchaseToken
i cofnać uprawnienia przyznane użytkownikowilinkedPurchaseToken
, aby mieć pewność, że więcej niż 1 użytkownik nie będzie uprawniony do tego samego zakupu. - Uprawnienia należy przyznać tylko wtedy, gdy stan zakupu to
PURCHASED
, i należy poprawnie obsługiwać zakupyPENDING
. Jeśli nastąpi gwałtowny wzrost liczby zakupówCANCELED
, możesz przyznawać uprawnienia, gdy zakupy są nadal w staniePENDING
. Więcej informacji znajdziesz w artykule Zarządzanie oczekującymi transakcjami. Jeśli po przyznaniu uprawnień chcesz użyć i potwierdzić produkt jednorazowego użytku, na zabezpieczonym serwerze backendu użyj interfejsu Play Developer API:
Purchases.products:consume
. Aby potwierdzić produkt niewykorzystywalny lub subskrypcję, wywołaj odpowiedni punkt końcowy interfejsu Play Developer API na zabezpieczonym serwerze backendu:Purchases.products:acknowledge
lubPurchases.subscriptions:acknowledge
Potwierdzenie jest wymagane, ponieważ informuje Google Play o tym, że użytkownik ma uprawnienia do zakupionych treści. Po przyznaniu uprawnień należy potwierdzić zakup.Pamiętaj, że chociaż możesz potwierdzić lub wykorzystać zakup po stronie klienta w aplikacji, interfejsy API po stronie serwera zapewniają dodatkową ochronę przed problemami takimi jak słabe połączenie z internetem i złośliwe działania. Na przykład użytkownik kupił produkt w Twojej aplikacji, ale podczas weryfikacji zakupu stracił połączenie z internetem. Bez potwierdzenia ze strony serwera może być konieczne ponowne zalogowanie się w aplikacji, aby dokończyć proces potwierdzenia. Jeśli użytkownik nie zaloguje się ponownie w ciągu 3 dni, zakup zostanie automatycznie zwrócony z powodu braku potwierdzenia zakupu. Potwierdzenie serwera zapobiega temu scenariuszowi, ponieważ jest wysyłane, gdy tylko Google Play powiadomi serwer o tym, że zakup jest ważny.
Więcej informacji o potwierdzaniu i wykorzystywaniu zakupów znajdziesz w artykule Przetwarzanie zakupów.
Ochrona odblokowanych treści
Aby uniemożliwić złośliwym użytkownikom rozpowszechnianie odblokowanych treści, nie umieszczaj ich w pliku APK. Zamiast tego wykonaj jedną z tych czynności:
- Używaj usługi w czasie rzeczywistym do dostarczania treści, np. kanału treści. Przesyłanie treści za pomocą usługi w czasie rzeczywistym pozwala też dbać o ich aktualność.
- Przesyłanie treści z dalszego serwera.
Gdy dostarczasz treści z dalszego serwera lub usługi w czasie rzeczywistym, możesz zapisać odblokowane treści w pamięci urządzenia lub na karcie SD urządzenia. Jeśli przechowujesz treści na karcie SD, pamiętaj, aby je zaszyfrować i użyć klucza szyfrowania dla danego urządzenia.
Wykrywanie i obsługa anulowanych zakupów
Nieważne zakupy to zakupy, które zostały anulowane, odwołane lub zwrócone. Jeśli anulowany zakup obejmował wcześniej przyznane użytkownikowi elementy w aplikacji lub inny rodzaj treści, możesz użyć interfejsu API anulowanych zakupów, aby poznać przyczynę anulowania zakupu oraz powiązane treści, które możesz odzyskać.
Zakupy w aplikacji i subskrypcje mogą zostać unieważnione z różnych powodów, m.in.:
- Anulowanie zakupu przez użytkownika, dewelopera lub Google (w tym niepotwierdzone automatycznie anulowane zakupy). W przypadku subskrypcji chodzi o anulowanie zakupu subskrypcji, a nie anulowanie samej subskrypcji.
- obciążenie zwrotne za zakup;
- Deweloper aplikacji anuluje zamówienie użytkownika lub zwraca środki i zaznacza w konsoli opcję „Anuluj”.
Na podstawie powodu anulowania zakupu i danych o zachowaniu użytkownika możesz podjąć odpowiednie działania. Zalecamy wdrożenie co najmniej jednej z tych opcji:
- Odzyskiwanie: gdy zakup zostanie unieważniony, możesz odzyskać niewykorzystane produkty tak, jakby nigdy nie zostały kupione. Jeśli na przykład zakup waluty w grze został unieważniony, możesz odzyskać walutę, która została już przyznana użytkownikowi. Jeśli użytkownik już wydał walutę, rozważ ustawienie salda waluty na ujemne i ograniczenie aktywności w aplikacji oraz przyszłych zakupów, dopóki saldo waluty nie będzie dodatnie.
- Wdrażanie systemu kilkukrotnych ostrzeżeń: rozważ podjęcie mniej drastycznych działań w przypadku użytkowników, którzy po raz pierwszy naruszyli zasady, np. wyświetlanie ostrzeżeń w aplikacji. W przypadku osób, które wielokrotnie naruszają zasady, rozważ zastosowanie bardziej surowych środków.
- Tymczasowe wyłączenie możliwości dokonywania zakupów: podobnie jak w przypadku implementacji wielu ostrzeżeń rozważ wyłączenie możliwości dokonywania zakupów przez użytkowników, którzy dokonali anulowanych zakupów, do czasu dokładnego zbadania przyczyny anulowania.
- Zablokuj dostęp do aplikacji tymczasowo lub na stałe: w skrajnych przypadkach powtarzającej się złośliwej aktywności rozważ zablokowanie dostępu do aplikacji tymczasowo lub na stałe.
- Częste wywoływanie interfejsu Voided Purchases API: gdy wykryjesz co najmniej 1 anulowane zakupy, rozważ częstsze wywoływanie interfejsu Voided Purchases API, aby odzyskać zakupy, zanim użytkownik zdąży je wykorzystać. Więcej informacji o limitach interfejsu API Voided Purchases znajdziesz w dokumentacji interfejsu API Voided Purchases.
Pomagaj Google wykrywać oszustwa, zanim się pojawią
Niektóre rodzaje oszustw są związane z umyślnymi działaniami użytkowników, którzy tworzą wiele kont Google i kont w aplikacji, aby ukryć swoją aktywność.
Aby pomóc Google w zmapowaniu kont Google na konta w aplikacji, użyj metod setObfuscatedAccountId
i setObfuscatedProfileId
w kreatorze BillingFlowParams
.
Google używa tych danych do wykrywania podejrzanego zachowania i blokowania niektórych rodzajów oszukańczych transakcji, zanim zostaną one sfinalizowane.
Podejmowanie działań przeciwko naruszeniom znaków towarowych i prawa autorskiego
Jeśli do dostarczania treści lub zarządzania nimi używasz serwera zdalnego, za każdym razem, gdy użytkownik uzyska dostęp do odblokowanych treści, aplikacja powinna weryfikować stan zakupu tych treści. Pozwala to w razie potrzeby cofnąć uprawnienia do korzystania z treści i zmniejszyć ryzyko ich piractwa. Jeśli zauważysz, że Twoje treści są rozpowszechniane w Google Play, musisz działać szybko i zdecydowanie. Więcej informacji znajdziesz na stronie Najczęstsze pytania dotyczące praw autorskich w Centrum pomocy z zakresu praw autorskich.