"İyi bir savunma, en iyi saldırıdır." Biri bunu söyledi.
Şey, API anahtarlarını depolamak ve bunları bilgisayar korsanlarına karşı korumak söz konusu olduğunda bu, Android'de kısmen doğrudur.
API anahtarlarınızı çeşitli nedenlerle gizli ve güvenli tutmanız gerekir. Bir bilgisayar korsanı API anahtarınıza erişim elde ederse şunları yapabilir:
- faturalandırma maliyetlerinizi büyük ölçüde artırabilecek API çağrıları yapmak ve / veya
- kullanıcılarınızın verilerini bozmak için kullanın.
API anahtarlarınızın güvenliğini artırmaya başlamadan önce, çoğu geliştiricinin şu anda API anahtarlarını nasıl sakladığını konuşalım.
API anahtarlarını depolamanın geleneksel yolu
API anahtarlarını saklamak strings.xml
: Bu büyük bir hayır-hayır. Kesinlikle güvenli değildir ve biraz tersine mühendislik ile, bilgisayar korsanları Android projenizdeki herhangi bir XML dosyasında saklarsanız API anahtarının şifresini kolayca çözebilir. Ayrıca, daha açık bir not olarak, deponuz herkese açıksa, strings.xml dosyanız da olacaktır. Bu, API anahtarınızın da herkese açık olacağı anlamına gelir.
API anahtarlarını saklamak gradle.properties
: Bu en popüler seçenek gibi görünüyor. Bu dosyayı şuraya eklemiş olabilirsiniz .gitignore
, API anahtarınızı uygulama düzeyinde referans alarak içeride bildirir build.gradle
dosyasını ve oluşturulan BuildConfig sınıfı aracılığıyla uygulamanızda kullanın. Bu, XML dosyalarında saklamaktan daha güvenli olsa da, API anahtarınız yine de birisi tarafından tersine mühendislik yoluyla çözülebilir. Dolayısıyla, bu, API anahtarlarınızı saklamanın çok güvenli bir yolu değildir.
Daha iyi yol: CMake'in gücünü Android'e getirme
CMake, diğer yazılımların derleme süreçlerini yöneten bir yazılım aracıdır.
Bu yazımda API anahtarınızı güvenli bir şekilde saklamak için kısa bir C ++ kodunun nasıl yazılacağını ve C ++ dosyanızdan API anahtarınıza nasıl erişileceğini paylaşacağım.
Yerel C / C ++ kodunun derlenmesi daha zordur ve bu nedenle, bilgisayar korsanları API anahtarlarınıza erişim sağlamakta daha zorlanır. Bunun, cihazınızda saklamaktan daha güvenli olduğu kanıtlanmıştır. gradle.properties
API anahtar depolama sisteminizin güvenliğini artırmak istiyorsanız, kesinlikle uygulamanıza eklemenizi tavsiye edeceğim bir şeydir.
Adım 1: Gerekli araçları kurun
Android Studio'da SDK Yöneticisi aracılığıyla 3 araç yüklemeniz gerekir:
- NDK (Yerel Geliştirme Kiti): Bu, Android'de C / C ++ koduyla çalışmak için kullanılan bir araçtır. Ayrıca sensörler, dokunmatik giriş vb. Gibi belirli cihaz bileşenlerine erişmenizi sağlar.
- LLDB (Düşük Seviye Hata Ayıklayıcı): Bu, yerel kod için bir hata ayıklayıcıdır.
- CMake: Bu, yerel C / C ++ kitaplığınızı oluşturan araçtır.
2. Adım: Bir native-lib.cpp
dosya
Yeni bir klasör oluşturun, cpp
, içeride app/src/main
.
Oluşturduktan sonra, sağ tıklayın cpp
klasör, tıklayın Yeni → C / C ++ Kaynak Dosyasıve dosyanızı adlandırın native-lib.cpp
.
3. Adım: API anahtarınızı native-lib.cpp
dosya
İçinde native-lib.cpp
, aşağıdaki kodu ekleyin:
#include <jni.h>
#include <string> extern "C" JNIEXPORT jstring JNICALL
Java_com_package_name_Keys_apiKey(JNIEnv *env, jobject object) { std::string api_key = "your_api_key_goes_here"; return env->NewStringUTF(api_key.c_str());
}
C ++ işlevinin adına daha yakından bakalım Java_com_package_name_Keys_apiKey(...)
yukarıda sağdan sola ilan edildi:
apiKey
: Bu, daha sonra Kotlin'de kullanacağınız yöntem adını doğrudan ifade eder.Keys
: Bu, API anahtarınızı kullanmak istediğiniz, C ++ kodlu ile etkileşime gireceğiniz ve API anahtarınıza (uygulamanızın genelinde kullanabileceğiniz) bir referans alacağınız Kotlin nesnesini ifade eder.com_package_name
: Bu, ilgili paket adını ifade eder.Keys
Kotlin nesnesi burada. Bu her zaman onu kullanmayı düşündüğünüz sınıfın paketine işaret etmelidir. Yani, paket adıcom.package.name
,.
(dönemler) ile değiştirilir_
(alt çizgi) ve şu hale gelircom_package_name
.
API anahtarınızı şurada saklayın: api_key
değişkenini yukarıdaki C ++ işlevinde bulun ve yukarıdaki kod parçacığında gösterildiği gibi döndürün.
not: Eklemeyi unutmayın native-lib.cpp
sizin için .gitignore
. Bu dosyanın sürüm kontrolünüzde olmasını İSTEMEZSİNİZ! Sürüm kontrolünün ne olduğunu bilmiyorsanız, bu eğiticiye göz atın okuyun.
4. Adım: Bir CMakeLists.txt
dosya
Altında app/
klasör, yeni bir metin dosyası oluşturun ve adlandırın CMakeLists.txt
. Aşağıdaki kodu dosyaya ekleyin:
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html # Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.4.1) # Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK. add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp ) # Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build. find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log ) # Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries. target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} )
Adım 5: Gradle'ı CMake için Yapılandırın
Aşağıdaki satırları ekleyin android
uygulama düzeyinde engelleme build.gradle
Dosya:
android { ... externalNativeBuild { cmake { path "CMakeLists.txt" } }
}
Gradle dosyanızı değiştirdikten sonra projenizi yeniden oluşturun.
Adım 6: Oluşturma Keys.kt
dosya
Bir Kotlin nesnesi oluşturun, Keys.kt
ve API anahtarınızı aşağıdaki şekilde alın:
object Keys { init { System.loadLibrary("native-lib") } external fun apiKey(): String
}
Şimdi aramalısın System.loadLibrary("native-lib")
yönteminde init
yazmış olduğunuz C ++ kodunu yüklemek için native-lib.cpp
dosyası.
Bunu yaptıktan sonra, 3. Adımda yukarıda belirtilenle aynı adla harici bir Kotlin işlevi bildirerek yönteminize bir referans alabilirsiniz. Bu örnekte, apiKey()
.
Şimdi, API anahtarınızı uygulamanızın herhangi bir bölümünden almak için şu numarayı aramanız yeterlidir:
Keys.apiKey()
Sonuç
API anahtarlarınızı kod tabanınızda kolayca kodu çözülebilecek şekilde bırakmak asla iyi bir fikir değildir.
İşte size göz atmanız ve başlamanız için ayarlanmış örnek bir uygulama:
Güvenli API Anahtar Deposu Oyun Alanı
Öyleyse, API anahtarlarınızın yanlış ellere düşmediğinden veya dağ kadar yüksek bir API faturasıyla sonuçlanmadığından emin olmak için bu küçük küçük numarayı deneyin! 😇
Kaynak: https://www.codementor.io/blog/kotlin-apikeys-7o0g54qk5b