我有一个要求符合NSSecureCoding
的Objective-C协议
@protocol MyProtocol <NSObject, NSSecureCoding>
…
@end
我有一个父对象,它存储了对符合MyProtocol
的对象的引用,我希望父对象也符合NSSecureCoding
。当我尝试这样做时:
required init?(coder aDecoder: NSCoder) {
if let childObject = aDecoder.decodeObject(of: MyProtocol.self, forKey: "childObject") {
self. childObject = childObject
} else {
return nil
}
}
我得到的错误是:'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'
。
如果您不知道所编码的对象的特定类,有什么方法可以使用NSSecureCoding吗?
发布于 2018-06-08 06:32:01
NSSecureCoding
的全部意义在于防止这种用例。如果您不知道您正在解码的类,那么攻击者可以诱使您解码成一个行为与您对给定方法期望的类不同的类(称为“替换攻击”)。这是一种用于攻击系统的技术,开发NSSecureCoding
就是为了阻止它。
即使不是这样,也不可能构造协议类型的对象。运行时将无法知道为实例变量分配多少内存。
为了符合NSSecureCoding
,您必须知道所有子对象的确切类。
https://stackoverflow.com/questions/50750655
复制相似问题