5.4 KiB
从零开始学习AWS黑客技术,使用 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 发现PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或 关注我的Twitter 🐦 @carlospolopm。
- 通过向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外部实体)攻击。
安全考虑
在对数据进行序列化时,特别是要写入文件系统时,必须警惕可能包含敏感信息。如果序列化数据被拦截或处理不当,可能会导致应用程序面临未经授权的操作或数据泄露等风险。建议对序列化数据进行加密和签名以增强安全性。
参考资料
从零开始学习AWS黑客技术 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或在Twitter 🐦 @carlospolopm** 上关注我**。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。