Üretken Veri Zekası

CMake ve Kotlin'i Kullanarak API Anahtarlarınızı Daha Güvenli Bir Şekilde Saklayın

Tarih:

"İ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 güvenliği Android.png
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.

Andoird API anahtarları security.png
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.

CMake Android.png

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.

Android API güvenliği CMake.png

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 gelir com_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.ktve 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

spot_img

En Son İstihbarat

spot_img