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

4.1 KiB
Raw Blame History

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

Kod ve daha fazla bilgi için https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

iOS Geliştirmede Nesne Serileştirmesi

iOS'ta, nesne serileştirmesi, nesneleri kolayca depolanabilen veya iletilebilen bir formata dönüştürmeyi ve ihtiyaç duyulduğunda bu formattan yeniden inşa etmeyi içerir. İki ana protokol, NSCoding ve NSSecureCoding, bu süreci Objective-C veya NSObject alt sınıfları için kolaylaştırır ve nesnelerin NSData formatına serileştirilmesine olanak tanır; bu format, bayt tamponlarını sarar.

NSCoding Uygulaması

NSCoding'i uygulamak için bir sınıf NSObject'tan miras almalı veya @objc olarak işaretlenmelidir. Bu protokol, örnek değişkenlerini kodlamak ve kod çözmek için iki yöntemin uygulanmasını zorunlu kılar:

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)
}
}

Güvenliği NSSecureCoding ile Artırma

Saldırganların zaten oluşturulmuş nesnelere veri enjekte etme açıklarını azaltmak için, NSSecureCoding geliştirilmiş bir protokol sunar. NSSecureCoding'e uyan sınıflar, kod çözme sırasında nesnelerin türünü doğrulamalıdır, böylece yalnızca beklenen nesne türlerinin oluşturulması sağlanır. Ancak, NSSecureCoding tür güvenliğini artırsa da, veriyi şifrelemez veya bütünlüğünü sağlamaz; bu nedenle hassas bilgilerin korunması için ek önlemler gereklidir:

static var supportsSecureCoding: Bool {
return true
}

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

Veri Arşivleme NSKeyedArchiver ile

NSKeyedArchiver ve onun karşıtı NSKeyedUnarchiver, nesneleri bir dosyaya kodlamayı ve daha sonra geri almayı sağlar. Bu mekanizma, nesneleri kalıcı hale getirmek için faydalıdır:

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

Kullanım Codable Basitleştirilmiş Serileştirme için

Swift'in Codable protokolü Decodable ve Encodable'ı birleştirerek, String, Int, Double gibi nesnelerin kodlanmasını ve kod çözümlemesini ekstra çaba harcamadan kolaylaştırır:

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

Bu yaklaşım, Swift uygulamalarında veri yönetimini geliştiren, özellik listelerine ve JSON'a basit serileştirme desteği sunar.

JSON ve XML Kodlama Alternatifleri

Yerel desteğin ötesinde, birkaç üçüncü taraf kütüphane JSON ve XML kodlama/çözme yetenekleri sunar; her birinin kendi performans özellikleri ve güvenlik dikkate alması vardır. Bu kütüphanelerin dikkatlice seçilmesi, özellikle dış varlık işleme işlemlerini önlemek için ayrıştırıcıların yapılandırılmasıyla XXE (XML Dış Varlıklar) saldırıları gibi zayıflıkları azaltmak açısından önemlidir.

Güvenlik Dikkate Alınması Gerekenler

Veri serileştirirken, özellikle dosya sistemine, hassas bilgilerin potansiyel olarak dahil edilmesine karşı dikkatli olmak önemlidir. Serileştirilmiş veriler, eğer ele geçirilirse veya yanlış bir şekilde işlenirse, uygulamaları yetkisiz işlemler veya veri sızıntısı gibi risklere maruz bırakabilir. Güvenliği artırmak için serileştirilmiş verilerin şifrelenmesi ve imzalanması önerilir.

Referanslar

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