예, 신뢰할 수없는 데이터와 함께 NSPropertyListSerialization을 사용하는 것이 안전합니다. 그러나 바이트 백을 plist 유형의 하이라이팅으로 변환 한 후에는 해당 유형의 유효성을 검사하여 예상 데이터 형식과 일치하는지 확인해야합니다. 당신이 값으로 문자열 키 사전 및 NSNumbers을 기대한다면
예를 들어, 당신은 뭔가 같은 것을 확인해야한다 :
NSString *errorDescription = nil;
NSPropertyListFormat format = 0;
id topObject = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorDescription];
NSDictionary *validDictionary = nil;
if ([topObject isKindOfClass:[NSDictionary class]]) {
BOOL allNumbers = YES;
for(id value in [topObject allValues]) {
allNumbers = allNumbers && [value isKindOfClass:[NSNumber class]];
}
if (allNumbers) {
validDictionary = topObject;
}
}
return validDictionary;
당신이하지 않으면, 그 데이터의 소스 유형이 일치하지 않는 아카이브에 plist 값을 배치 할 수 있었거나 클라이언트의 오작동을 일으켜 보안상의 취약점으로 작용할 수있는 잘못된 값을 넣을 수있었습니다.