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}}
|
|
|
|
Código y más información en [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence).
|
|
|
|
## Serialización de Objetos en el Desarrollo de iOS
|
|
|
|
En iOS, **la serialización de objetos** implica convertir objetos en un formato que se puede almacenar o transmitir fácilmente, y luego reconstruirlos a partir de este formato cuando sea necesario. Dos protocolos principales, **`NSCoding`** y **`NSSecureCoding`**, facilitan este proceso para Objective-C o subclases de `NSObject`, permitiendo que los objetos se serialicen en **`NSData`**, un formato que envuelve búferes de bytes.
|
|
|
|
### Implementación de **`NSCoding`**
|
|
|
|
Para implementar `NSCoding`, una clase debe heredar de `NSObject` o estar marcada como `@objc`. Este protocolo exige la implementación de dos métodos para codificar y decodificar variables de instancia:
|
|
```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)
|
|
}
|
|
}
|
|
```
|
|
### **Mejorando la Seguridad con `NSSecureCoding`**
|
|
|
|
Para mitigar vulnerabilidades donde los atacantes inyectan datos en objetos ya construidos, **`NSSecureCoding`** ofrece un protocolo mejorado. Las clases que cumplen con `NSSecureCoding` deben verificar el tipo de objetos durante la decodificación, asegurando que solo se instancien los tipos de objetos esperados. Sin embargo, es crucial notar que, aunque `NSSecureCoding` mejora la seguridad de tipos, no cifra los datos ni garantiza su integridad, lo que requiere medidas adicionales para proteger la información sensible:
|
|
```swift
|
|
static var supportsSecureCoding: Bool {
|
|
return true
|
|
}
|
|
|
|
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
|
|
```
|
|
## Archivado de Datos con `NSKeyedArchiver`
|
|
|
|
`NSKeyedArchiver` y su contraparte, `NSKeyedUnarchiver`, permiten codificar objetos en un archivo y recuperarlos más tarde. Este mecanismo es útil para persistir objetos:
|
|
```swift
|
|
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
|
|
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
|
|
```
|
|
### Usando `Codable` para una Serialización Simplificada
|
|
|
|
El protocolo `Codable` de Swift combina `Decodable` y `Encodable`, facilitando la codificación y decodificación de objetos como `String`, `Int`, `Double`, etc., sin esfuerzo adicional:
|
|
```swift
|
|
struct CustomPointStruct: Codable {
|
|
var x: Double
|
|
var name: String
|
|
}
|
|
```
|
|
Este enfoque admite la serialización directa hacia y desde listas de propiedades y JSON, mejorando el manejo de datos en aplicaciones Swift.
|
|
|
|
## Alternativas de Codificación JSON y XML
|
|
|
|
Más allá del soporte nativo, varias bibliotecas de terceros ofrecen capacidades de codificación/decodificación JSON y XML, cada una con sus propias características de rendimiento y consideraciones de seguridad. Es imperativo seleccionar cuidadosamente estas bibliotecas, especialmente para mitigar vulnerabilidades como ataques XXE (XML External Entities) configurando los analizadores para prevenir el procesamiento de entidades externas.
|
|
|
|
### Consideraciones de Seguridad
|
|
|
|
Al serializar datos, especialmente al sistema de archivos, es esencial estar atento a la posible inclusión de información sensible. Los datos serializados, si son interceptados o manejados de manera inapropiada, pueden exponer a las aplicaciones a riesgos como acciones no autorizadas o filtraciones de datos. Se recomienda cifrar y firmar los datos serializados para mejorar la seguridad.
|
|
|
|
## Referencias
|
|
|
|
- [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}}
|