Azimjon Abdurasulov

Security (Xavfsizlik)

Darsliklar (Tutorials)

Security (Xavfsizlik) — To'liq Darslik

Mundarija

  1. Nega xavfsizlik muhim? (OWASP Top 10)
  2. UserDefaults xavfsizligi — Nega unda parol saqlab bo'lmaydi?
  3. Keychain Services — Xavfsiz saqlash
  4. Biometric Authentication (Face ID / Touch ID)
  5. SSL/TLS Pinning — MiTM hujumidan himoya
  6. App Transport Security (ATS)
  7. Data Protection API — Fayllarni himoyalash
  8. Jailbreak Detection — Tekshirish usullari
  9. Obfuscation (Kodlarni yashirish)
  10. Apple "Sign in with Apple" xavfsizligi
  11. Xulosa va Xavfsizlik Checklist

1. Nega xavfsizlik muhim? {#motivatsiya}

Ilovangiz foydalanuvchining bank malumotlari, parollari yoki shaxsiy xabarlarini saqlashi mumkin. Agar xavfsizlikka e'tibor bermasangiz:

  • Ma'lumotlar o'g'irlanishi mumkin.
  • Foydalanuvchi ishonchi yo'qoladi.
  • Apple App Store review dan o'tkazmaydi.

2. UserDefaults xavfsizligi {#user-defaults}

UserDefaults — bu shunchaki oddiy .plist fayli. U shifrlanmagan (not encrypted). İstagan odam telefon ichidagi fayllarni ochib, undagi ma'lumotlarni o'qiy oladi.

  • ✅ Ha: Til sozlamasi, dark/light mode, "Yana ko'rsatilmasin" flagi.
  • ❌ Yo'q: Parollar, API Tokenlar, kredit karta ma'lumotlari.

3. Keychain Services {#keychain}

Parol va tokenlarni saqlashning eng xavfsiz joyi — Keychain. U tizim darajasida shifrlangan bo'ladi va faqat sizning ilovangiz unga kira oladi.

// Keychain'ga saqlash (oddiy wrapper orqali)
let secret = "my_api_token_123"
let data = secret.data(using: .utf8)!

let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrAccount as String: "user_session",
    kSecValueData as String: data
]

SecItemAdd(query as CFDictionary, nil)

💡 Amaliyotda SwiftKeychainWrapper yoki Valet kabi tayyor kutubxonalardan foydalanish tavsiya etiladi.


4. Biometric Authentication {#biometric}

Face ID yoki Touch ID orqali kirishni o'rnatish.

import LocalAuthentication

let context = LAContext()
var error: NSError?

if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
    context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Ilovaga kirish uchun tasdiqlang") { success, error in
        if success {
            print("Muvaffaqiyatli!")
        }
    }
}

5. SSL/TLS Pinning {#ssl-pinning}

Hackerlar "Man-in-the-Middle" (MiTM) hujumi orqali siz yuborgan API so'rovlarni o'rtada tutib, o'qishlari mumkin. SSL Pinning orqali ilova faqat sizning aniq serveringizga ishonishini kafolatlaymiz.


6. App Transport Security (ATS) {#ats}

Apple barcha tarmoq so'rovlari HTTPS bo'lishini talab qiladi. Shifrlanmagan HTTP so'rovlar bloklanadi (info.plist da exception qo'shilmagan bo'lsa).


7. Data Protection API {#data-protection}

Fayllarni diskka saqlaganda, telefon bloklangan (locked) paytda ularni o'qib bo'lmaydigan qilib qo'yish:

try data.write(to: fileURL, options: .completeFileProtection)

8. Jailbreak Detection {#jailbreak}

Jailbreak qilingan qurilmalarda xavfsizlik devorlari buzilgan bo'ladi. Bunda ilovangiz ishlamasligi yoki ogohlantirish berishi mumkin.

  • Cydia ilovasi borligini tekshirish.
  • Tizim fayllariga yozish huquqini tekshirish.

9. Obfuscation (Kodlarni yashirish) {#obfuscation}

Ilovani "reverse engineering" (kodni qayta tiklash) qilishdan qiyinlashtirish. Swift'da bu qiyin, lekin muhim stringlarni (masalan, API Key) shifrlab saqlash mumkin.


10. Apple "Sign in with Apple" xavfsizligi {#apple-auth}

Apple foydalanuvchining haqiqiy emailini yashirgan holda xavfsiz ro'yxatdan o'tish imkonini beradi. Ilova uchun bu eng xavfsiz va ishonchli Auth usullaridan biridir.


11. Xulosa va Xavfsizlik Checklist {#xulosa}

Checklist:

  • [ ] Parollar va Tokenlar faqat Keychain'da.
  • [ ] HTTPS ishlatilgan.
  • [ ] UserDefaults da shaxsiy ma'lumot yo'q.
  • [ ] API kalitlari kod ichida ochiq holda emas.
  • [ ] Muhim ishlarda Biometrik tasdiqlash bor.

Vazifa: LocalAuthentication yordamida ilovaga kirishdan oldin Face ID so'raydigan kichik kod yozing! 🔐

Markdown manba

iOS Lessons