首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在id对象中使用NSSecureCoding

如何在id对象中使用NSSecureCoding
EN

Stack Overflow用户
提问于 2015-07-09 02:56:37
回答 1查看 2.2K关注 0票数 9

我正在创建一个链接列表,并使用容器对对象、next和以前的属性进行分组。与基金会集合一样,我希望它实现NSSecureCoding。以下是声明:

代码语言:javascript
复制
@interface ListContainer : NSObject <NSCopying, NSSecureCoding>

@property (readonly, nonatomic) id object;
@property (nonatomic) ListContainer * next;
@property (nonatomic) ListContainer * previous;

@end

在实现- initWithCoder:方法时,我突然意识到,我不知道要为对象使用哪个类:

代码语言:javascript
复制
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];

    if (self) {

        _object = [aDecoder decodeObjectOfClass:<#(__unsafe_unretained Class)#> forKey:@"object"];

        BOOL nextIsNil = [aDecoder decodeBoolForKey:@"nextIsNil"];

        if (!nextIsNil) {

            // Decode next
            _next = [aDecoder decodeObjectOfClass:[ListContainer class] forKey:@"next"];

            if (_next == nil) {
                return nil;
            }

            // Link the nodes manually to prevent infinite recursion
            self.next.previous = self;
        }
    }

    return self;
}

我应该用-decodeObjectForKey:代替吗?它还是安全的编码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 21:11:00

最后,我把同样的问题发到Cocoa的邮件列表上,最有趣的讨论发生了。其中一些重点是:

..。制作一个普通的NSArray,比如NSString,NSNumber,编码它,用decodeObjectForClasses解码它,没有类。你会在数组上失败。将NSArray添加到允许的类列表中。它起作用了。所以,你认为,NSArray会盲目地解码任何东西,这样它就不再安全了。将实现安全编码的自定义类的对象添加到数组中,它将再次失败。NSArray和其他集合类型允许已知安全系统类型的元素(如NSString ),但在此之外的任何元素都会失败。..。

在这一点上,我理解NSArray的行为并不像我预期的那样。安全编码似乎不再那么安全了:

这看起来很不理想..。事实上,它解码了一组已知的实现NSSecureCoding的类是错误的,IMO,有两个原因. 1)包含的类实现NSSecureCoding 并不意味着我期望它是。..。 2)限制了可以存储的类。..。

在替换攻击中得到一个我没有预料到的类是特别可怕的。显然,可可的承诺是不同的,尽管:

..。如果在编码中直接使用NSArray()或其他集合类,则需要检查返回的。它们被“安全地”解码,以至于苹果相信解码它们不会导致缓冲区溢出等等,--这是默认情况下只能得到的。..。

因此,不,NSSecureCoding不能保证容器的安全编码,或者至少它不能保证类型检查,而且您必须自己进行。即使在Cocoa的原生数据结构中也不是我最初假设的那样(有原因,我仍然认为)。

道具给罗兰国王所有的努力。你可以看到完整的对话这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31307331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档