在我的项目中,我有一些Util函数将NSData转换为NSDictionary或NSArray,并使用NSJSONSerialization https://developer.apple.com/documentation/foundation/nsjsonserialization/1415493-jsonobjectwithdata?language=objc
示例:
+ (NSDictionary *) jsonToDictionary: (NSData *)jsonResult mutableContainer:(BOOL)mutContainer mutableString:(BOOL)mutString failBlock:(void(^)(NSError *)) failBlock {
NSError *error;
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonResult options:(kNilOptions) || (mutContainer ? NSJSONReadingMutableContainers:kNilOptions) || (mutString ? NSJSONReadingMutableLeaves: kNilOptions) error:&error];
if (error) {
if (failBlock) {
failBlock (error);
}
}
return result;
}
但是,当此项目使用合作伙伴的渗透测试时。他们说它具有 JSON注入。
JavaScript Object Notation或JSON是一种开放标准的文件格式,它使用人类可读的文本来传输由属性-值对和数组数据类型组成的数据对象。
在评估过程中,发现应用程序将未经验证的输入写入JSON。
当数据从不受信任的来源进入程序时,将发生JSON注入。此调用可能允许攻击者将任意元素或属性注入JSON实体。成功的利用可能会导致拒绝服务或损害移动应用程序。
将用户提供的数据写入JSON时,应遵循一些准则:
不要创建名称来自用户输入的JSON属性。
确保使用安全的序列化功能(例如, NSJSONSerialization.dataWithJSONObject,用于在单引号或双引号中分隔不受信任的数据,并转义任何特殊字符。
如何通过JSON注入的pentation-test-rules,但仍然 能够维护此功能的正确功能