iOS Serialisation and Encoding

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Code and more information in 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")

Архівування даних за допомогою NSKeyedArchiver

NSKeyedArchiver та його аналог, NSKeyedUnarchiver, дозволяють кодувати об'єкти у файлі та пізніше отримувати їх. Цей механізм корисний для збереження об'єктів:

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

Використання Codable для спрощення серіалізації

Протокол Codable у Swift поєднує Decodable та Encodable, сприяючи кодуванню та декодуванню об'єктів, таких як String, Int, Double і т.д., без додаткових зусиль:

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

Цей підхід підтримує просту серіалізацію до та з властивих списків та JSON, покращуючи обробку даних в додатках Swift.

Альтернативи кодування JSON та XML

Поза вбудованою підтримкою, кілька сторонніх бібліотек пропонують можливості кодування/декодування JSON та XML, кожна з власними характеристиками продуктивності та врахуванням безпеки. Надзвичайно важливо ретельно вибирати ці бібліотеки, особливо для запобігання вразливостей, таких як атаки XXE (зовнішні сутності XML), налаштовуючи парсери для запобігання обробки зовнішніх сутностей.

Врахування безпеки

Під час серіалізації даних, особливо на файлову систему, важливо бути бджливими стосовно можливого включення чутливої інформації. Серіалізовані дані, якщо вони потраплять у руки зловмисників або будуть неправильно оброблені, можуть викласти додатки ризикам, таким як несанкціоновані дії або витік даних. Рекомендується шифрування та підписання серіалізованих даних для підвищення безпеки.

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated