tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
代码和更多信息在 https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence。
iOS 开发中的对象序列化
在 iOS 中,对象序列化 涉及将对象转换为可以轻松存储或传输的格式,然后在需要时从该格式重建它们。两个主要协议,NSCoding
和 NSSecureCoding
,为 Objective-C 或 NSObject
子类提供了这一过程,允许对象序列化为 NSData
,一种包装字节缓冲区的格式。
NSCoding
实现
要实现 NSCoding
,一个类必须继承自 NSObject
或标记为 @objc
。该协议要求实现两个方法来编码和解码实例变量:
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)
}
}
通过 NSSecureCoding
增强安全性
为了减轻攻击者将数据注入已构造对象的漏洞,NSSecureCoding
提供了一种增强的协议。符合 NSSecureCoding
的类必须在解码时验证对象的类型,确保仅实例化预期的对象类型。然而,重要的是要注意,虽然 NSSecureCoding
增强了类型安全性,但它并不加密数据或确保其完整性,因此需要采取额外措施来保护敏感信息:
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
数据归档与 NSKeyedArchiver
NSKeyedArchiver
及其对应的 NSKeyedUnarchiver
允许将对象编码到文件中,并在后续检索。这种机制对于持久化对象非常有用:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
使用 Codable
简化序列化
Swift 的 Codable
协议结合了 Decodable
和 Encodable
,便于对 String
、Int
、Double
等对象进行编码和解码,而无需额外的努力:
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
这种方法支持简单的序列化和反序列化到属性列表和 JSON,增强了 Swift 应用程序中的数据处理。
JSON 和 XML 编码替代方案
除了原生支持外,还有几个第三方库提供 JSON 和 XML 编码/解码功能,每个库都有其自身的性能特征和安全考虑。必须仔细选择这些库,特别是为了减轻像 XXE(XML 外部实体)攻击等漏洞,通过配置解析器来防止外部实体处理。
安全考虑
在序列化数据时,特别是到文件系统时,必须警惕潜在的敏感信息的包含。如果序列化数据被拦截或处理不当,可能会使应用程序面临未经授权的操作或数据泄露等风险。建议对序列化数据进行加密和签名以增强安全性。
参考文献
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。