mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
69 lines
4.1 KiB
Markdown
69 lines
4.1 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
Kod ve daha fazla bilgi için [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence).
|
||
|
||
## iOS Geliştirmede Nesne Serileştirmesi
|
||
|
||
iOS'ta, **nesne serileştirmesi**, nesnelerin kolayca depolanabilen veya iletilebilen bir formata dönüştürülmesini ve ihtiyaç duyulduğunda bu formattan yeniden yapılandırılmasını 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 çözmek için iki metodun uygulanmasını zorunlu kılar:
|
||
```swift
|
||
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:
|
||
```swift
|
||
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:
|
||
```swift
|
||
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ülmesini ekstra çaba harcamadan kolaylaştırır:
|
||
```swift
|
||
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 sağlar.
|
||
|
||
## 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 alımları vardır. Bu kütüphaneleri dikkatlice seçmek, özellikle dış varlık işleme işlemlerini önlemek için ayrıştırıcıları yapılandırarak XXE (XML Dış Varlıklar) saldırıları gibi zayıflıkları azaltmak açısından önemlidir.
|
||
|
||
### Güvenlik Dikkate Alımları
|
||
|
||
Veri serileştirirken, özellikle dosya sistemine, hassas bilgilerin potansiyel olarak dahil edilmesi konusunda 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
|
||
|
||
- [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|