Swift अनुप्रयोग सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ
Swift में मोबाइल और डेस्कटॉप अनुप्रयोग विकसित करने के लिए केवल सिंटैक्स और फ्रेमवर्क का ज्ञान ही नहीं, बल्कि साइबर सुरक्षा की मूल बातें समझना भी आवश्यक है। कोड में एक छोटी सी गलती भी उपयोगकर्ता डेटा के लीक होने या डिवाइस से समझौता होने का कारण बन सकती है। इस लेख में, हम Swift अनुप्रयोगों की शीर्ष 10 सामान्य कमजोरियों पर चर्चा करेंगे, जिनका सामना शुरुआती डेवलपर्स करते हैं, और दिखाएंगे कि उनसे कैसे बचा जाए।
1. असुरक्षित डेटा भंडारण (Insecure Data Storage)
सबसे आम गलतियों में से एक है UserDefaults या सादे टेक्स्ट फ़ाइलों में गोपनीय जानकारी (पासवर्ड, टोकन, API कुंजियाँ) संग्रहीत करना। जेलब्रेक किए गए डिवाइस पर इस डेटा को आसानी से निकाला जा सकता है।
// गलत: UserDefaults में पासवर्ड संग्रहीत करनाUserDefaults.standard.set("mySecretPassword", forKey: "userPassword")
// सही: Keychain का उपयोग करनाimport Securitylet password = "mySecretPassword"let keychainItem = [ kSecClass: kSecClassGenericPassword, kSecAttrAccount: "userPassword", kSecValueData: password.data(using: .utf8)!] as CFDictionarySecItemAdd(keychainItem, nil)2. SQLite और Core Data के माध्यम से इंजेक्शन
डेटाबेस क्वेरी में अनप्रोसेस्ड स्ट्रिंग का उपयोग SQL इंजेक्शन का रास्ता खोलता है। भले ही आप Core Data का उपयोग कर रहे हों, असुरक्षित प्रेडिकेट पर हमला किया जा सकता है।
// गलत: सीधा प्रतिस्थापनlet username = "admin' OR '1'='1"let query = "SELECT * FROM users WHERE name = '\\(username)'"
// सही: पैरामीटराइज्ड क्वेरी का उपयोग (FMDB)let query = "SELECT * FROM users WHERE name = ?"db.executeQuery(query, withArgumentsIn: [username])3. HTTPS और SSL Pinning का अभाव
HTTP के बजाय HTTPS का उपयोग न करना एप्लिकेशन को "मैन-इन-द-मिडल" (MITM) हमलों के प्रति संवेदनशील बनाता है। HTTPS के साथ भी, अतिरिक्त सुरक्षा के लिए SSL Pinning का उपयोग करने की अनुशंसा की जाती है।
// Info.plist में HTTPS सेटअप// <key>NSAppTransportSecurity</key>// <dict>// <key>NSAllowsArbitraryLoads</key>// <false/>// </dict>
// URLSession के साथ SSL Pinning का कार्यान्वयनlet pinnedKeys = ["yourPublicKeyHash"]let delegate = URLSessionPinningDelegate(pinnedKeys: pinnedKeys)let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil)4. कमजोर एन्क्रिप्शन एल्गोरिदम
पुराने एन्क्रिप्शन एल्गोरिदम (MD5, SHA1) या स्व-निर्मित क्रिप्टोग्राफ़िक फ़ंक्शन का उपयोग डेटा को कमजोर बनाता है। हमेशा आधुनिक लाइब्रेरी का उपयोग करें।
// गलत: MD5let hash = MD5(string: "password")
// सही: SHA256 के साथ CommonCrypto का उपयोगimport CommonCryptofunc sha256(_ data: Data) -> Data { var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) data.withUnsafeBytes { _ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash) } return Data(hash)}5. अपर्याप्त इनपुट सत्यापन (Input Validation)
उपयोगकर्ता इनपुट का सत्यापन न करना WebView में XSS हमलों या डेटा भ्रष्टाचार का कारण बन सकता है। सभी इनपुट डेटा की लंबाई, प्रारूप और सामग्री की जाँच करें।
// गलत: इनपुट पर भरोसा करनाlet userInput = textField.textwebView.loadHTMLString(userInput!, baseURL: nil)
// सही: इनपुट को सैनिटाइज़ करनाfunc sanitizeInput(_ input: String) -> String { return input .replacingOccurrences(of: "&", with: "&") .replacingOccurrences(of: "<", with: "<") .replacingOccurrences(of: ">", with: ">")}6. लॉग और डीबगिंग के माध्यम से डेटा लीक
प्रोडक्शन में छोड़े गए print() या NSLog गोपनीय डेटा को उजागर कर सकते हैं। डीबग संदेशों के लिए सशर्त संकलन का उपयोग करें।
// गलत: प्रोडक्शन में लॉगिंग