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}}
|
|
|
|
Codice e ulteriori informazioni 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).
|
|
|
|
## Serializzazione degli Oggetti nello Sviluppo iOS
|
|
|
|
In iOS, **la serializzazione degli oggetti** comporta la conversione degli oggetti in un formato che può essere facilmente memorizzato o trasmesso, e poi la ricostruzione di essi da questo formato quando necessario. Due protocolli principali, **`NSCoding`** e **`NSSecureCoding`**, facilitano questo processo per le sottoclassi di Objective-C o `NSObject`, consentendo agli oggetti di essere serializzati in **`NSData`**, un formato che avvolge i buffer di byte.
|
|
|
|
### Implementazione di **`NSCoding`**
|
|
|
|
Per implementare `NSCoding`, una classe deve ereditare da `NSObject` o essere contrassegnata come `@objc`. Questo protocollo richiede l'implementazione di due metodi per la codifica e la decodifica delle variabili di istanza:
|
|
```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)
|
|
}
|
|
}
|
|
```
|
|
### **Migliorare la Sicurezza con `NSSecureCoding`**
|
|
|
|
Per mitigare le vulnerabilità in cui gli attaccanti iniettano dati in oggetti già costruiti, **`NSSecureCoding`** offre un protocollo migliorato. Le classi che si conformano a `NSSecureCoding` devono verificare il tipo di oggetti durante la decodifica, assicurando che vengano istanziati solo i tipi di oggetti attesi. Tuttavia, è fondamentale notare che mentre `NSSecureCoding` migliora la sicurezza dei tipi, non cripta i dati né garantisce la loro integrità, rendendo necessarie misure aggiuntive per proteggere le informazioni sensibili:
|
|
```swift
|
|
static var supportsSecureCoding: Bool {
|
|
return true
|
|
}
|
|
|
|
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
|
|
```
|
|
## Archiviazione dei Dati con `NSKeyedArchiver`
|
|
|
|
`NSKeyedArchiver` e il suo corrispondente, `NSKeyedUnarchiver`, consentono di codificare oggetti in un file e successivamente recuperarli. Questo meccanismo è utile per la persistenza degli oggetti:
|
|
```swift
|
|
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
|
|
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
|
|
```
|
|
### Utilizzo di `Codable` per una Serializzazione Semplificata
|
|
|
|
Il protocollo `Codable` di Swift combina `Decodable` e `Encodable`, facilitando la codifica e la decodifica di oggetti come `String`, `Int`, `Double`, ecc., senza sforzo aggiuntivo:
|
|
```swift
|
|
struct CustomPointStruct: Codable {
|
|
var x: Double
|
|
var name: String
|
|
}
|
|
```
|
|
Questo approccio supporta la serializzazione semplice da e verso le liste di proprietà e JSON, migliorando la gestione dei dati nelle applicazioni Swift.
|
|
|
|
## Alternative di Codifica JSON e XML
|
|
|
|
Oltre al supporto nativo, diverse librerie di terze parti offrono capacità di codifica/decodifica JSON e XML, ognuna con le proprie caratteristiche di prestazione e considerazioni di sicurezza. È imperativo selezionare attentamente queste librerie, specialmente per mitigare vulnerabilità come attacchi XXE (XML External Entities) configurando i parser per prevenire l'elaborazione di entità esterne.
|
|
|
|
### Considerazioni di Sicurezza
|
|
|
|
Quando si serializzano i dati, specialmente nel file system, è essenziale essere vigili riguardo alla potenziale inclusione di informazioni sensibili. I dati serializzati, se intercettati o gestiti in modo improprio, possono esporre le applicazioni a rischi come azioni non autorizzate o perdite di dati. Si raccomanda di crittografare e firmare i dati serializzati per migliorare la sicurezza.
|
|
|
|
## Riferimenti
|
|
|
|
- [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}}
|