hacktricks/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md

7.7 KiB

{{#include ../../banners/hacktricks-training.md}}

Code और अधिक जानकारी https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence में।

iOS विकास में ऑब्जेक्ट सीरियलाइजेशन

iOS में, ऑब्जेक्ट सीरियलाइजेशन का अर्थ है ऑब्जेक्ट्स को एक ऐसे प्रारूप में परिवर्तित करना जिसे आसानी से संग्रहीत या प्रसारित किया जा सके, और फिर आवश्यकता पड़ने पर इस प्रारूप से उन्हें पुनर्निर्मित करना। दो मुख्य प्रोटोकॉल, NSCoding और NSSecureCoding, इस प्रक्रिया को Objective-C या NSObject उपवर्गों के लिए सरल बनाते हैं, जिससे ऑब्जेक्ट्स को NSData में सीरियलाइज किया जा सकता है, जो बाइट बफर को लपेटता है।

NSCoding कार्यान्वयन

NSCoding को लागू करने के लिए, एक कक्षा को NSObject से विरासत में लेना चाहिए या इसे @objc के रूप में चिह्नित किया जाना चाहिए। इस प्रोटोकॉल में इंस्टेंस वेरिएबल्स को एन्कोडिंग और डिकोडिंग के लिए दो विधियों का कार्यान्वयन अनिवार्य है:

class CustomPoint: NSObject, NSCoding {
var x: Double = 0.0
var name: String = ""

func encode(with aCoder: NSCoder) {
aCoder.encode(x, forKey: "x")
aCoder.encode(name, forKey: "name")
}

required convenience init?(coder aDecoder: NSCoder) {
guard let name = aDecoder.decodeObject(forKey: "name") as? String else { return nil }
self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name)
}
}

NSSecureCoding के साथ सुरक्षा बढ़ाना

हमलावरों द्वारा पहले से निर्मित वस्तुओं में डेटा इंजेक्ट करने की कमजोरियों को कम करने के लिए, NSSecureCoding एक उन्नत प्रोटोकॉल प्रदान करता है। NSSecureCoding का पालन करने वाली कक्षाओं को डिकोडिंग के दौरान वस्तुओं के प्रकार की पुष्टि करनी चाहिए, यह सुनिश्चित करते हुए कि केवल अपेक्षित वस्तु प्रकारों को ही स्थापित किया जाए। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि जबकि NSSecureCoding प्रकार की सुरक्षा को बढ़ाता है, यह डेटा को एन्क्रिप्ट नहीं करता है या इसकी अखंडता सुनिश्चित नहीं करता है, संवेदनशील जानकारी की सुरक्षा के लिए अतिरिक्त उपायों की आवश्यकता होती है:

static var supportsSecureCoding: Bool {
return true
}

let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")

Data Archiving with NSKeyedArchiver

NSKeyedArchiver और इसके समकक्ष, NSKeyedUnarchiver, वस्तुओं को एक फ़ाइल में एन्कोड करने और बाद में उन्हें पुनः प्राप्त करने की अनुमति देते हैं। यह तंत्र वस्तुओं को स्थायी बनाने के लिए उपयोगी है:

NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint

Using Codable for Simplified Serialization

स्विफ्ट का Codable प्रोटोकॉल Decodable और Encodable को मिलाता है, जिससे String, Int, Double आदि जैसे ऑब्जेक्ट्स का एन्कोडिंग और डिकोडिंग बिना अतिरिक्त प्रयास के किया जा सकता है:

struct CustomPointStruct: Codable {
var x: Double
var name: String
}

यह दृष्टिकोण प्रॉपर्टी सूचियों और JSON के लिए सीधे सीरियलाइजेशन का समर्थन करता है, जो Swift अनुप्रयोगों में डेटा प्रबंधन को बढ़ाता है।

JSON और XML एन्कोडिंग विकल्प

स्थानीय समर्थन के अलावा, कई तृतीय-पक्ष पुस्तकालय JSON और XML एन्कोडिंग/डिकोडिंग क्षमताएँ प्रदान करते हैं, प्रत्येक के अपने प्रदर्शन विशेषताएँ और सुरक्षा विचार होते हैं। इन पुस्तकालयों का सावधानीपूर्वक चयन करना अनिवार्य है, विशेष रूप से XXE (XML बाहरी संस्थाएँ) हमलों जैसी कमजोरियों को कम करने के लिए पार्सरों को कॉन्फ़िगर करके बाहरी संस्थाओं की प्रोसेसिंग को रोकना।

सुरक्षा विचार

डेटा को सीरियलाइज करते समय, विशेष रूप से फ़ाइल सिस्टम के लिए, संवेदनशील जानकारी के संभावित समावेश के प्रति सतर्क रहना आवश्यक है। सीरियलाइज्ड डेटा, यदि इंटरसेप्ट किया जाता है या गलत तरीके से संभाला जाता है, तो अनुप्रयोगों को अनधिकृत क्रियाओं या डेटा लीक जैसे जोखिमों के प्रति उजागर कर सकता है। सुरक्षा बढ़ाने के लिए सीरियलाइज्ड डेटा को एन्क्रिप्ट और साइन करना अनुशंसित है।

संदर्भ

{{#include ../../banners/hacktricks-training.md}}