Security (Xavfsizlik)
Darsliklar (Tutorials)
Security (Xavfsizlik) — To'liq Darslik
Mundarija
- Nega xavfsizlik muhim? (OWASP Top 10)
- UserDefaults xavfsizligi — Nega unda parol saqlab bo'lmaydi?
- Keychain Services — Xavfsiz saqlash
- Biometric Authentication (Face ID / Touch ID)
- SSL/TLS Pinning — MiTM hujumidan himoya
- App Transport Security (ATS)
- Data Protection API — Fayllarni himoyalash
- Jailbreak Detection — Tekshirish usullari
- Obfuscation (Kodlarni yashirish)
- Apple "Sign in with Apple" xavfsizligi
- 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.
Cydiailovasi 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.
- [ ]
UserDefaultsda 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! 🔐