iOS Serialisation and Encoding
Codice e ulteriori informazioni su https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.
Serializzazione degli oggetti nello sviluppo iOS
In iOS, la serializzazione degli oggetti consiste nella conversione degli oggetti in un formato che può essere facilmente memorizzato o trasmesso, e quindi nella loro ricostruzione 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
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:
Migliorare la sicurezza con NSSecureCoding
NSSecureCoding
Per mitigare le vulnerabilità in cui gli attaccanti iniettano dati in oggetti già costruiti, NSSecureCoding
offre un protocollo avanzato. Le classi che si conformano a NSSecureCoding
devono verificare il tipo di oggetti durante la decodifica, garantendo che vengano istanziati solo gli oggetti di tipo previsto. Tuttavia, è importante notare che mentre NSSecureCoding
migliora la sicurezza del tipo, non crittografa i dati o ne garantisce l'integrità, rendendo necessarie ulteriori misure per proteggere le informazioni sensibili:
Archiviazione dati con NSKeyedArchiver
NSKeyedArchiver
NSKeyedArchiver
e il suo controparte, NSKeyedUnarchiver
, consentono di codificare gli oggetti in un file e successivamente recuperarli. Questo meccanismo è utile per persistere gli oggetti:
Utilizzo di Codable
per la serializzazione semplificata
Codable
per la serializzazione semplificataIl protocollo Codable
di Swift combina Decodable
e Encodable
, facilitando la codifica e decodifica di oggetti come String
, Int
, Double
, ecc., senza sforzo aggiuntivo:
Questo approccio supporta la serializzazione diretta in e da 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 funzionalità di codifica/decodifica JSON e XML, ognuna con le proprie caratteristiche di prestazioni e considerazioni sulla sicurezza. È fondamentale selezionare attentamente queste librerie, specialmente per mitigare vulnerabilità come gli attacchi XXE (XML External Entities) configurando i parser per impedire l'elaborazione di entità esterne.
Considerazioni sulla sicurezza
Quando si serializzano dati, specialmente nel file system, è essenziale essere vigili sulla 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 perdita di dati. Si consiglia di crittografare e firmare i dati serializzati per migliorare la sicurezza.
Riferimenti
Last updated