Jef*_*f V 2 protocols ios nssecurecoding swift
我有一个Objective-C协议,需要遵守NSSecureCoding:
@protocol MyProtocol <NSObject, NSSecureCoding>
…
@end
Run Code Online (Sandbox Code Playgroud)
我有一个父对象,该对象存储对符合标准的对象的引用MyProtocol,我希望父对象也符合NSSecureCoding。当我尝试这个:
required init?(coder aDecoder: NSCoder) {
if let childObject = aDecoder.decodeObject(of: MyProtocol.self, forKey: "childObject") {
self. childObject = childObject
} else {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'。
如果您不知道所编码对象的特定类,是否可以使用NSSecureCoding?
整个要点NSSecureCoding是防止这种用例。如果您不知道要解码的类,则攻击者可以诱使您解码成行为与给定方法所期望的类不同的类(称为“替代攻击”)。这是一种用于攻击系统的技术,NSSecureCoding后来被开发用来阻止它。
即使不是这种情况,也无法构造协议类型的对象。运行时将无法知道要为实例变量分配多少内存。
为了符合NSSecureCoding,您必须知道所有子对象的精确类。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |