我在核心数据库中有一个查询谓词,但我不知道验证其参数的正确方法是什么?
- (void) queryToDatabaseWithStoreId:(NSInteger) storeId {
[NSPredicate predicateWithFormat:@"store.storeId = %d", storeId];
}
我的问题是如何验证 storeId 参数或我需要使用什么来消除该漏洞?
如果我有一个清单:
- (void) queryToDataBaseWithListStore:(NSArray<Store *> *) storeList {
[NSPredicate predicateWithFormat:@"store.storeId IN %@", [storeList valueForObject:@"storeId"]];
}
我需要避免这种情况:
以下常用函数和方法容易受到格式字符串攻击:
标准 C
printf 和 printf(3) 手册页中列出的其他函数 sscanf 和 scanf(3) 手册页中列出的其他函数 syslog 和 vsyslog
碳
AEBuildDesc 和 vAEBuildDesc AEBuildParameters 和 vAEBuildParameters AEBuildAppleEvent 和 vAEBuildAppleEvent 核心基础 CFStringCreateWithFormat CFStringCreateWithFormatAndArguments CFStringAppendFormat CFStringAppendFormatAndArguments
可可
stringWithFormat:, initWithFormat:, 和其他将格式化字符串作为参数的 NSString 方法 appendFormat: 在 NSMutableString 类中 alertWithMessageText:defaultButton:alternateButton: otherButton :informativeTextWithFormat: 在 NSAlert predicateWithFormat:, predicateWithFormat:arguments: 和predicateWithFormat:argumentArray: 在 NSPredicate :format: 和 raise:format:arguments: 在 NSException NSRunAlertPanel 和其他创建或返回面板或工作表的 AppKit 函数中
避免这种攻击的最佳方法是什么?