Keamanan dan Desain

Saat merancang implementasi Penagihan dalam Aplikasi, pastikan untuk mengikuti panduan keamanan dan desain yang dibahas di dokumen ini. Panduan ini adalah praktik terbaik yang disarankan untuk siapa saja yang menggunakan layanan Penagihan dalam Aplikasi Google Play.

Praktik Terbaik Keamanan

Melakukan tugas verifikasi tanda tangan di server

Jika memungkinkan, Anda harus melakukan verifikasi tanda tangan di server jauh, bukan di perangkat. Mengimplementasikan proses verifikasi di server mempersulit penyerang untuk meretas proses verifikasi dengan merekayasa balik file .apk Anda. Jika Anda memindahkan beban pemrosesan keamanan pada server jauh, pastikan handshake perangkat-server aman.

Melindungi materi yang tidak dikunci

Untuk mencegah pengguna berbahaya agar tidak mendistribusikan ulang materi yang tidak dikunci, jangan paketkan materi ini ke dalam file .apk. Sebagai gantinya, lakukan yang berikut:

  • Gunakan layanan real-time untuk menyerahkan materi, misalnya melalui umpan materi. Menyerahkan materi melalui layanan real-time memungkinkan Anda terus menyediakan materi yang terus diperbarui.
  • Menggunakan server jauh untuk menyerahkan materi.

Saat Anda menyerahkan materi dari server jauh atau layanan real-time, Anda bisa menyimpan materi yang tidak dikunci di memori perangkat atau menyimpannya di kartu SD perangkat. Jika Anda menyimpan materi di kartu SD, pastikan mengenkripsi materi dan menggunakan kunci enkripsi khusus perangkat.

Menyamarkan kode Anda

Anda harus menyamarkan kode Penagihan dalam Aplikasi Anda untuk mempersulit penyerang untuk merekayasa baik protokol keamanan dan komponen aplikasi yang lain. Setidaknya, kami menyarankan agar Anda menjalankan alat penyamar, seperti Proguard di kode Anda.

Selain menjalankan program penyamar, kami menyarankan agar Anda menggunakan teknik berikut untuk menyamarkan kode Penagihan dalam Aplikasi Anda.

  • Sejajarkan metode ke dalam metode lain.
  • Buat string saat dalam proses, bukan mendefinisikannya sebagai konstanta.
  • Gunakan refleksi Java untuk memanggil metode.

Menggunakan teknik ini bisa membantu mengurangi lapisan serangan aplikasi Anda dan membantu meminimalkan serangan yang bisa menaklukkan implementasi Penagihan dalam Aplikasi Anda.

Catatan: Jika Anda menggunakan Proguard untuk menyamarkan kode, Anda harus menambahkan baris berikut pada file konfigurasi Proguard Anda:

-keep class com.android.vending.billing.**

Mengubah semua kode aplikasi contoh

Aplikasi contoh Penagihan dalam Aplikasi didistribusikan secara publik dan bisa diunduh oleh siapa saja, yang artinya mudah bagi penyerang untuk merekayasa balik aplikasi Anda jika Anda menggunakan kode contoh ini persis seperti yang diterbitkan. Aplikasi contoh hanya ditujukan agar dipakai hanya sebagai contoh. Jika menggunakan bagian apa pun dari aplikasi contoh, Anda harus mengubahnya sebelum menerbitkan atau merilisnya sebagai bagian dari aplikasi produksi.

Khususnya, penyerang mencari titik masuk dan titik keluar yang diketahui di aplikasi, sehingga penting bagi Anda untuk mengubah bagian tersebut di kode yang sama dengan aplikasi contoh.

Menggunakan nonce acak aman

Nonce tidak boleh mudah diprediksi atau digunakan kembali. Selalu gunakan pembuat angka acak yang secara kriptografis aman (seperti SecureRandom) saat Anda membuat nonce. Ini bisa membantu mengurangi penyerangan replay.

Selain itu, jika Anda menjalankan verifikasi nonce di server, pastikan Anda membuat nonce di server.

Menetapkan string payload developer saat membuat permintaan

Dengan In-app Billing Version 3 API, Anda bisa menyertakan token string 'developer payload' saat mengirim permintaan pembelian ke Google Play. Umumnya, ini digunakan untuk meneruskan token string yang secara unik mengidentifikasi permintaan pembelian. Jika Anda menentukan nilai string, Google Play mengembalikan string ini bersama dengan respons pembelian. Lalu, saat Anda membuat kueri tentang pembelian ini, Google Play mengembalikan string ini bersama detail pembelian.

Anda harus meneruskan token string yang membantu aplikasi Anda mengidentifikasi pengguna yang melakukan pembelian, sehingga nantinya Anda bisa memverifikasi bahwa ini adalah pembelian yang sah oleh pengguna tersebut. Untuk item yang bisa dikonsumsi, Anda bisa menggunakan string yang dibuat secara acak, tetapi untuk item yang tidak bisa dikonsumsi, Anda harus menggunakan string yang secara unik mengidentifikasi pengguna.

Catatan: Jangan gunakan alamat email pengguna di string payload karena alamat ini bisa berubah.

Saat Anda mendapatkan kembali respons dari Google Play, pastikan untuk memverifikasi bahwa string payload developer cocok dengan token yang sebelumnya Anda kirimkan bersama permintaan pembelian. Sebagai antisipasi keamanan lebih lanjut, Anda harus melakukan verifikasi dari server aman Anda sendiri.

Mengambil aksi terhadap pelanggaran merek dagang dan hak cipta

Jika Anda melihat materi Anda didistribusikan ulang di Google Play, ambil tindakan cepat dan tegas. Ajukan pemberitahuan pelanggaran merek dagang atau pemberitahuan pelanggaran hak cipta.

Menerapkan skema pencabutan untuk materi yang tidak dikunci

Jika Anda menggunakan server jauh untuk menyediakan atau mengelola materi, perintahkan aplikasi Anda untuk memverifikasi status pembelian materi yang tidak dikunci setiap kali pengguna mengakses materi. Ini memungkinkan Anda mencabut penggunaan bila diperlukan dan meminimalkan pembajakan.

Melindungi kunci publik Google Play Anda

Untuk mengamankan kunci publik Anda dari pengguna dan peretas berbahaya, jangan sematkan ke dalam kode apa pun sebagai string literal. Sebagai gantinya, buat string saat waktu proses dari bagian-bagian atau gunakan manipulasi bit (misalnya , XOR dengan string lainnya) untuk menyembunyikan kunci sebenarnya. Kunci ini sendiri bukanlah informasi rahasia, tetapi Anda tentu tidak ingin memudahkan peretas atau pengguna berbahaya untuk mengganti kunci publik dengan kunci lain.