Untuk meringkas:
- Anda memiliki kunci API yang dikeluarkan untuk Anda oleh vendor sehingga Anda dapat menggunakan API mereka, dan Anda memiliki kewajiban untuk mencegah kunci ini agar tidak diketahui oleh orang lain
- Anda membuat panggilan ke API vendor itu (yang memerlukan kunci API) dalam kode aplikasi Anda
- Anda menyebarkan aplikasi ke sistem di mana pelanggan memiliki akses ke binari dan dengan demikian berpotensi mendekompilasi / mengurangi kode atau memotong lalu lintas
Cara terbaik untuk mencegah kompromi kunci ini adalah dengan tetap mengendalikannya. Ini berarti itu tidak boleh digunakan pada server di mana siapa pun selain Anda bisa membaca biner, dan tidak pernah pergi melalui tautan komunikasi yang tidak Anda kontrol.
Pada akhirnya, jika binari berada di luar kendali Anda, semua yang ada di dalamnya berada di luar kendali Anda. Demikian juga, jika seseorang dapat mencegat lalu lintas, mereka dapat menangkap kunci API ( berpotensi bahkan jika Anda menggunakan SSL ).
Saya dapat melihat dua cara utama untuk mencapai ini, keduanya tidak termasuk kunci API pribadi Anda dalam aplikasi yang Anda gunakan:
Dapatkan kunci API unik untuk setiap penerapan
Ini akan memerlukan beberapa hubungan tambahan dengan vendor, di mana Anda dapat memperoleh kunci atau meminta pelanggan Anda mendapatkan kunci.
Ini sebenarnya sangat umum dengan, misalnya, produk yang menggunakan Google Maps API. Pembuat perangkat lunak memiliki kunci sendiri yang mereka gunakan saat mengembangkan / menjalankan salinan mereka, tetapi mereka tidak memasukkannya dalam perangkat lunak, dan sebaliknya, mengharuskan Anda, sebagai pengguna yang menginstal perangkat lunak tersebut, untuk pergi ke Google dan mendapatkan API Anda sendiri kunci. Perangkat lunak hanya memiliki opsi konfigurasi untuk mengatur kunci Google Maps API untuk digunakan.
Faktanya, banyak vendor yang mengeluarkan kunci API secara kontrak mengharuskan Anda melakukan hal-hal seperti ini, jadi Anda mungkin berada di jalur yang salah, dan ini mungkin satu-satunya solusi yang diizinkan untuk digunakan sesuai dengan Ketentuan Layanan vendor dan / atau kontrak hukum apa pun yang mungkin Anda miliki dengannya.
Gunakan Proxy
Siapkan API proxy, tempat aplikasi Anda memanggil API Anda (di server Anda), dan pada gilirannya, API Anda memanggil API vendor menggunakan kunci tersebut.
Anda mungkin memerlukan perlindungan tambahan pada API Anda, misalnya, sesuatu untuk memastikan hanya aplikasi Anda yang menggunakannya. Ini dapat dilakukan dengan:
- membuat fungsi tidak spesifik, tetapi aplikasi Anda dapat menggunakannya
- Daftar putih IP
- Beberapa mekanisme lisensi / otorisasi yang sudah Anda miliki untuk server Anda
- Sistem kunci API Anda sendiri tempat Anda dapat mengeluarkan kunci untuk pelanggan Anda
Yang perlu diingat di sini adalah bahwa Anda mungkin tidak diizinkan untuk melakukan ini. Vendor Anda mungkin memiliki Ketentuan Layanan atau kontrak hukum yang mencegah Anda membangun "layanan agregasi" atau proksi, jadi Anda perlu memeriksanya.
Menangani Kelakuan Buruk
Bahkan jika kunci Anda tidak dikompromikan, jika salah satu pelanggan Anda melakukan sesuatu yang menyebabkan vendor memblokir kunci Anda, tiba-tiba SEMUA pelanggan Anda dinonaktifkan, dan satu-satunya perbaikan Anda adalah memperbarui semua orang lain.
Demikian pula, jika Anda ingin memblokir salah satu pelanggan Anda (misalnya, mereka berhenti membayar, telah membajak perangkat lunak, dll) maka Anda tidak dapat melakukannya tanpa mengeluarkan pembaruan kepada orang lain, dan kemudian menonaktifkan kunci.
Logistik ini untuk apa pun di luar segelintir klien akan dengan cepat menjadi tidak bisa dipertahankan.
Apakah Anda bertindak sebagai proxy atau memiliki kunci unik untuk setiap instalasi, Anda dapat menangani situasi ini dengan relatif mudah (dan dengan sedikit atau tanpa dampak kepada orang lain).
Mencoba untuk melindungi kuncinya saat tertanam di dalam perangkat lunak Anda pada akhirnya merupakan upaya yang sia-sia. Apa pun yang Anda lakukan, penyerang apa pun yang memiliki akses ke binari, sumber, dan / atau saluran komunikasi dan cukup bertekad untuk mendapatkannya pada kunci mereka akan dapat melakukannya.
Jadi jangan menanamkannya. "Satu-satunya langkah yang menang bukanlah bermain."