
React Native Uygulama Güvenliği: Mobil Varlıklarınızı Nasıl Korursunuz?
React Native uygulama güvenliği, “bir kere yaz, her yerde çalıştır” mantığıyla geliştiricilerin gözdesi olmaya devam ediyor. Ancak JavaScript tabanlı yapısı ve Native köprü (bridge) mimarisi, güvenlik konusunda ekstra hassasiyet gerektirir. Bir mobil uygulama güvenliği uzmanı gözüyle bakıldığında, React Native uygulamaları, doğru yapılandırılmadığında istemci tarafı (client-side) saldırılarına açık hale gelebilir.
Bu rehberde, React Native uygulamalarınızı OWASP standartlarına göre nasıl güçlendireceğinizi, verileri nasıl şifreleyeceğinizi ve tersine mühendislik (reverse engineering) girişimlerine karşı nasıl savunma hattı kuracağınızı detaylandıracağız.
1. Hassas Verilerin Güvenli Depolanması (Secure Storage)
React Native geliştiricilerinin yaptığı en yaygın hata, hassas verileri (API token’ları, kullanıcı kimlik bilgileri vb.) saklamak için AsyncStorage kullanmaktır.
Neden AsyncStorage Kullanmamalısınız?
AsyncStorage, verileri şifrelemeden, düz metin (plain-text) olarak saklar. Android cihazlarda bu veriler data/data/com.paketadi/ dizini altında XML veya JSON formatında tutulur. Root edilmiş bir cihazda veya fiziksel erişimi olan bir saldırgan için bu verileri okumak saniyeler sürer.
Çözüm: KeyChain ve Keystore Kullanımı
Hassas veriler için işletim sisteminin sunduğu güvenli kasaları (iOS için Keychain, Android için Keystore) kullanmalısınız.
Öneri:
react-native-keychainveyareact-native-encrypted-storagekütüphanelerini projenize dahil edin. Bu kütüphaneler, cihazın donanım destekli şifreleme yeteneklerini kullanır.
İpucu: Daha fazla teknik detay için React Native Security Documentation sayfasını inceleyebilirsiniz.
2. Ağ Güvenliği ve SSL Pinning
Uygulamanız ile sunucu arasındaki iletişim HTTPS üzerinden sağlansa bile, Man-in-the-Middle (MitM) saldırılarına karşı tam koruma sağlamaz. Saldırganlar, kendi oluşturdukları sertifikaları (CA) kurbanın cihazına yükleyerek trafiği dinleyebilir (Sniffing) ve manipüle edebilirler.
SSL Pinning Nedir?
SSL Pinning, uygulamanızın sadece belirli bir sertifikayı veya o sertifikanın “public key” özetini kabul etmesini sağlar. Böylece araya giren sahte sertifikalar reddedilir.
Uygulama: React Native’de
react-native-ssl-pinningkütüphanesini kullanabilir veyaaxiosvefetchişlemlerinizde native modüller üzerinden pinning yapabilirsiniz.Dikkat: Sertifika süresi dolduğunda uygulamanın çalışmayı durdurmaması için “Public Key Pinning” yöntemi tercih edilmelidir.
Bu konuda global standartları öğrenmek için OWASP Mobile Top 10 listesindeki “Insecure Communication” başlığına göz atmanızı öneririm.
3. Kod Karıştırma (Obfuscation) ve Tersine Mühendislik Koruması
React Native uygulamaları özünde JavaScript dosyalarıdır. Bir APK veya IPA dosyasını açıp index.android.bundle dosyasını inceleyen herhangi biri, iş mantığınızı (business logic) kolayca okuyabilir.
Hermes Motoru ve Bytecode
Meta (Facebook) tarafından geliştirilen Hermes Engine, JavaScript kodunu derleme aşamasında bytecode’a dönüştürür. Bu sadece performansı artırmakla kalmaz, aynı zamanda kodun okunabilirliğini zorlaştırarak tersine mühendisliği güçleştirir.
ProGuard ve R8 (Android)
Android tarafında android/app/build.gradle dosyasında enableProguardInReleaseBuilds seçeneğini true yaparak Java/Kotlin kodlarınızı karıştırabilirsiniz.
Jscrambler ve JavaScript Obfuscation
Daha ileri seviye bir koruma için JavaScript kodunu karmaşık hale getiren (variable renaming, dead code injection) araçlar kullanılmalıdır. Ücretsiz “uglifier” araçları başlangıç için iyi olsa da, finansal uygulamalar için profesyonel çözümler gerekebilir.
4. Root ve Jailbreak Tespiti
Bir cihazın “Root” (Android) veya “Jailbreak” (iOS) yapılmış olması, işletim sisteminin güvenlik katmanlarının devre dışı bırakıldığı anlamına gelir. Bu cihazlarda çalışan uygulamalar, Frida gibi dinamik analiz araçlarıyla (hooking) manipüle edilebilir.
Uygulamanızın kritik işlemleri (ödeme, giriş vb.) sırasında cihazın güvenli olup olmadığını kontrol etmesi gerekir.
Kütüphane Önerisi:
jail-monkey(eskimiş olabilir) yerine güncel topluluk tarafından desteklenenreact-native-device-infoveya özel native modüller ile kontrol sağlanmalıdır.
Ancak unutmayın, tüm client-side kontroller atlatılabilir. Bu nedenle güvenlik kontrollerini her zaman sunucu tarafında (backend) da doğrulamalısınız.
5. API Anahtarları ve Ortam Değişkenleri (.env)
Projelerinizde asla API anahtarlarını, secret key’leri kodun içine (hardcoded) gömmeyin. GitHub’a yanlışlıkla push edilen bir API key, saniyeler içinde botlar tarafından tespit edilebilir.
Çözüm:
react-native-configveyareact-native-dotenvkütüphanelerini kullanarak ortam değişkenlerini yönetin.Önemli Not:
.envdosyaları da derleme sırasında uygulamanın içine gömülür. Bu yüzden, uygulamanın içinde saklanan hiçbir “secret”ın tam anlamıyla gizli olmadığını kabul etmeli ve kritik yetkilendirmeleri backend üzerinden yapmalısınız.
6. Güvenli Derin Bağlantılar (Deep Linking)
Deep Link kullanımı, kullanıcı deneyimi için harikadır ancak güvenlik açıklarına kapı aralayabilir. Kötü niyetli bir uygulama, sizin URL şemanızı (myapp://) dinleyerek hassas verileri çalabilir veya kullanıcıyı oltalama (phishing) sayfalarına yönlendirebilir.
Doğrulama: Apple tarafında Universal Links, Android tarafında ise App Links kullanarak, linklerin sadece sizin domaininizden açılmasını garanti altına alın.
7. Üçüncü Parti Kütüphane Yönetimi
React Native ekosistemi NPM paketlerine bağımlıdır. Projenize dahil ettiğiniz her paket, potansiyel bir güvenlik açığı taşıyabilir.
Denetim: Düzenli olarak
npm auditkomutunu çalıştırın.Tedarik Zinciri Saldırıları: Popüler kütüphanelerin taklitlerine karşı dikkatli olun ve sadece güvenilir kaynaklardan paket yükleyin.
Sonuç: Güvenlik Bir Özellik Değil, Süreçtir
React Native ile güvenli uygulama geliştirmek, sadece birkaç kütüphane eklemekten ibaret değildir. Bu, mimari tasarımdan kodlama pratiklerine, test süreçlerinden (Penetration Testing) yayınlama aşamasına kadar süren bir disiplindir.
Özellikle Runtime Manipulation (Çalışma Zamanı Manipülasyonu) saldırılarına karşı uygulamanızı test etmek için Frida gibi araçları öğrenerek kendi uygulamanıza “saldırmayı” denemeniz, savunmanızı geliştirmenin en iyi yoludur.
Android uygulama güvenliği ilginizi çekerse :Android Uygulama Güvenliği ve Bileşenleri












