खोज…
परिचय
IOS में सुरक्षा डेटा सुरक्षा, परिवहन सुरक्षा, कोड सुरक्षा, आदि से संबंधित है
एसएसएल का उपयोग करते हुए परिवहन सुरक्षा
iOS ऐप्स को डेटा को सुरक्षा प्रदान करने के लिए एक तरह से लिखा जाना चाहिए, जो नेटवर्क पर पहुंचाया जा रहा है।
एसएसएल इसे करने का सामान्य तरीका है।
जब भी ऐप वेब सेवाओं को डेटा को सर्वर पर खींचने या पुश करने के लिए कॉल करने की कोशिश करता है, तो उसे HTTP पर HTTP, यानी HTTPS का उपयोग करना चाहिए।
ऐसा करने के लिए, ऐप को https://server.com/part
ऐसी वेब सेवाओं को कॉल करना होगा न कि http://server.com/part
।
इस स्थिति में, एप्लिकेशन को SSL सर्टिफिकेट का उपयोग करके server.com
पर भरोसा करना होगा।
यहाँ सर्वर ट्रस्ट को मान्य करने का उदाहरण दिया गया है-
URLSessionDelegate
लागू करें:
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
let serverTrust:SecTrust = challenge.protectionSpace.serverTrust!
func acceptServerTrust() {
let credential:URLCredential = URLCredential(trust: serverTrust)
challenge.sender?.use(credential, for: challenge)
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
let success = SSLTrustManager.shouldTrustServerTrust(serverTrust, forCert: "Server_Public_SSL_Cert")
if success {
acceptServerTrust()
return
}
}
else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate {
completionHandler(.rejectProtectionSpace, nil);
return
}
completionHandler(.cancelAuthenticationChallenge, nil)
}
यहाँ ट्रस्ट मैनेजर है: (स्विफ्ट कोड नहीं मिला)
@implementation SSLTrustManager
+ (BOOL)shouldTrustServerTrust:(SecTrustRef)serverTrust forCert:(NSString*)certName {
// Load up the bundled certificate.
NSString *certPath = [[NSBundle mainBundle] pathForResource:certName ofType:@"der"];
NSData *certData = [[NSData alloc] initWithContentsOfFile:certPath];
CFDataRef certDataRef = (__bridge_retained CFDataRef)certData;
SecCertificateRef cert = SecCertificateCreateWithData(NULL, certDataRef);
// Establish a chain of trust anchored on our bundled certificate.
CFArrayRef certArrayRef = CFArrayCreate(NULL, (void *)&cert, 1, NULL);
SecTrustSetAnchorCertificates(serverTrust, certArrayRef);
// Verify that trust.
SecTrustResultType trustResult;
SecTrustEvaluate(serverTrust, &trustResult);
// Clean up.
CFRelease(certArrayRef);
CFRelease(cert);
CFRelease(certDataRef);
// Did our custom trust chain evaluate successfully?
return trustResult == kSecTrustResultUnspecified;
}
@end
Server_Public_SSL_Cert.der सर्वर की सार्वजनिक SSL कुंजी है।
इस दृष्टिकोण का उपयोग करके हमारा ऐप यह सुनिश्चित कर सकता है कि यह इच्छित सर्वर पर संचार कर रहा है और कोई भी ऐप-सर्वर संचार को बाधित नहीं कर रहा है।
आईट्यून्स बैकअप में डेटा सुरक्षित करना
यदि हम चाहते हैं कि हमारा ऐप डेटा आईट्यून्स बैकअप से सुरक्षित रहे, तो हमें अपने ऐप डेटा को आईट्यून्स में बैकअप होने से बचाना होगा।
जब भी आईओएस डिवाइस मैकओएस पर आईट्यून्स का उपयोग करके बैकअप लेता है, तो सभी एप्लिकेशन द्वारा संग्रहीत सभी डेटा को उस बैकअप में कॉपी किया जाता है और बैकिंग कंप्यूटर पर संग्रहीत किया जाता है।
लेकिन हम URLResourceKey.isExcludedFromBackupKey
कुंजी का उपयोग करके इस बैकअप से अपने ऐप डेटा को बाहर कर सकते हैं।
यहाँ हमारे app की निर्देशिका संरचना है:
नोट: आम तौर पर संवेदनशील डेटा को 'एप्लीकेशन सपोर्ट' डायरेक्टरी में स्टोर किया जाता है।
उदाहरण के लिए, यदि हम एप्लिकेशन सपोर्ट डायरेक्टरी में संग्रहीत हमारे सभी डेटा को बाहर करना चाहते हैं तो हम उपरोक्त कुंजी का उपयोग कर सकते हैं:
let urls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
let baseURL = urls[urls.count-1];
let bundleIdentifier = Bundle.main.object(forInfoDictionaryKey: "CFBundleIdentifier") as! String
let pathURL = baseURL.appendingPathComponent(bundleIdentifier)
let persistentStoreDirectoryPath = pathURL.path
if !FileManager.default.fileExists(atPath: persistentStoreDirectoryPath) {
do {
try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil)
}catch {
//handle error
}
}
let dirURL = URL.init(fileURLWithPath: persistentStoreDirectoryPath, isDirectory: true)
do {
try (dirURL as NSURL).setResourceValue((true), forKey: .isExcludedFromBackupKey)
} catch {
//handle error
}
उपर्युक्त दृष्टिकोण काम करता है या नहीं, इसकी पुष्टि करने के लिए सभी बैकअप किए गए डेटा के लिए iTunes बैकअप देखने के लिए बहुत सारे टूल उपलब्ध हैं।
iExplorer iTunes बैकअप का पता लगाने के लिए अच्छा है।