React Native mobil uygulamalarda güvenlik açıklarını otomatik olarak tespit eden araç.
Projenin dizinini ver, çalıştır — sana ne eksik, ne tehlikeli, nasıl düzeltirsin söyler.
Node.js yoksa: nodejs.org adresinden LTS sürümü indir ve kur.
npm install -g rn-security-auditBu kadar. Artık bilgisayarında her yerden kullanılabilir.
Terminal'i aç ve şunu yaz:
rn-security-audit /PROJE/DIZINIÖrnek:
rn-security-audit ~/Documents/benim-uygulamaProje dizini =
package.jsondosyasının bulunduğu klasör.
Dizini bilmiyorsan: Terminalde projenin içindeyken pwd yaz, çıkan yolu kopyala.
npx rn-security-audit /PROJE/DIZINIÇalıştırınca şuna benzer bir çıktı göreceksin:
━━━ 1. AndroidManifest Güvenlik Kontrolleri
[GEÇTİ] usesCleartextTraffic kapalı
[KRİTİK] allowBackup eksik
→ Öneri: android:allowBackup="false" ekleyin.
[UYARI] dataExtractionRules tanımlanmamış
━━━ 2. Hardcoded Credential & Email Sızıntısı
[KRİTİK] Hardcoded şifre tespit edildi
src/slices/token.slice.ts:74: password: 'sifre123'
→ Öneri: Şifreyi .env dosyasına taşıyın.
=================================================
ÖZET
=================================================
GEÇTİ : 24
UYARI : 3
BAŞARISIZ: 2
| Etiket | Anlamı | Ne yapmalısın? |
|---|---|---|
[GEÇTİ] |
Bu kontrol tamam, sorun yok | Bir şey yapma |
[UYARI] |
Sorun olabilir, dikkat et | İnce, gerekiyorsa düzelt |
[KRİTİK] |
Güvenlik açığı var | Mutlaka düzelt, altındaki öneriyi uygula |
Her [KRİTİK] satırının hemen altında → Öneri: yazar — tam olarak ne yapman gerektiğini söyler.
Tarama bittiğinde araç sana sorar:
Otomatik düzeltmeleri uygulayayım mı? [y/N]:
y dersen şu güvenli düzeltmeleri otomatik yapar:
| Düzeltme | Ne Yapar? |
|---|---|
.env → .gitignore |
Yeni eklenir, ayrıca git cache'inden çıkarılır |
| AndroidManifest | allowBackup="false" ve networkSecurityConfig ekler |
network_security_config.xml |
Dosyayı sıfırdan oluşturur (cleartext kapalı) |
build.gradle |
ProGuard release build için açar |
Podfile |
Hermes'i iOS için açar |
.env.example |
.env'deki anahtarları boş değerlerle kopyalar |
Otomatik yapılmayan riskli değişiklikler (elle yap):
- Kod içindeki hardcoded email/şifre kaldırma
- Android izin kaldırma
- Bağımlılık güncelleme
CI/CD'de bu prompt atlanır (CI=true otomatik tespit edilir). Manuel atlamak için: RN_AUDIT_NO_FIX=1
Uygulamanın temel Android güvenlik ayarlarını kontrol eder.
- HTTP trafiğine izin veriliyor mu?
- Yedekleme (backup) açık mı?
- Debug modu production'da aktif mi?
iOS tarafında güvenlik ayarlarını ve izin açıklamalarını kontrol eder.
- App Transport Security (ATS) kapatılmış mı? (
NSAllowsArbitraryLoads) - İzin açıklamaları (
NSCameraUsageDescriptionvb.) eksik veya boş mu? - iTunes File Sharing açık mı? (
UIFileSharingEnabled) - WebView'da file URL erişimi açık mı?
- Hassas veri AsyncStorage yerine Keychain'de mi saklanıyor?
- Hermes iOS'ta etkin mi?
- Release build'de DEBUG makrosu kalmış mı?
Kaynak koduna gömülmüş şifre, email, API anahtarı arar.
- Şifre doğrudan koda yazılmış mı?
- Çalışan email adresleri bundle'a sızmış mı?
.envdosyası yanlışlıkla git'e atılmış mı?
Uygulamanın sunucuyla güvenli konuşup konuşmadığını kontrol eder.
- Certificate pinning var mı?
- HTTP (şifresiz) bağlantıya izin veriliyor mu?
- Ağ güvenlik config dosyası doğru yapılandırılmış mı?
Uygulamanın istediği Android izinlerini inceler.
- Gereksiz izin var mı? (GPS, depolama, mikrofon vb.)
- Kullanıcıya izin neden istendiği açıklanıyor mu?
Uygulamanın tersine mühendisliğe karşı korunup korunmadığını kontrol eder.
- ProGuard/R8 açık mı? (kod karmaşıklaştırma)
- Source map production APK'ya gömülmüş mü?
- Root/jailbreak tespiti var mı?
- APK imza doğrulaması var mı?
Kullandığın kütüphanelerde bilinen açık olup olmadığını kontrol eder.
npm auditçalıştırır, kritik açıkları raporlar- Riskli paket kullanımı var mı?
- Versiyon kilidi (lock dosyası) var mı?
Her PR açıldığında otomatik çalışmasını istersen, hazır GitHub Action'ı kullan:
# .github/workflows/security-audit.yml
name: Security Audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: frk101/rn-security-audit@v1
with:
project-dir: '.' # opsiyonel, varsayılan repo kökü
fail-on: 'critical' # critical | warning | none| Input | Varsayılan | Açıklama |
|---|---|---|
project-dir |
. |
Taranacak proje dizini |
fail-on |
critical |
critical: sadece kritik varsa build düşer, warning: uyarı bile olsa düşer, none: hiç düşmez |
| Output | Açıklama |
|---|---|
pass-count |
Geçen kontrol sayısı |
warn-count |
Uyarı sayısı |
fail-count |
Kritik bulgu sayısı |
Her run sonunda GitHub Actions sekmesindeki Summary'de özet tablo otomatik gösterilir.
Proje dizinini nasıl bulurum?
Terminal'de projenin içindeyken pwd yaz, dizini kopyala.
"Permission denied" hatası alıyorum.
chmod +x ~/Documents/rn-security-audit/scripts/audit.sh
chmod +x ~/Documents/rn-security-audit/scripts/checks/*.sh"No such file or directory" hatası alıyorum. Proje dizinini yanlış yazmış olabilirsin. Dizinin doğru olduğunu kontrol et:
ls /PROJE/DIZINI/package.jsonBu komut dosyayı listeliyorsa dizin doğrudur.
Tek bir kontrolü çalıştırabilir miyim? Evet:
bash ~/Documents/rn-security-audit/scripts/checks/credentials.sh /PROJE/DIZINI