iphone - 如何防止Core Data中出现 "SQL Injection"?

标签 iphone core-data nspredicate

我正在多次迭代中构建一个非常复杂的谓词,并且希望立即在谓词中提供匹配值。

而不是:

[NSPredicate predicateWithFormat:@"departmentName like[c] %@"];

我想做:

NSString *str = [NSString stringWithFormat:@"部门名称如[c] '%@'", 部门名称]; [NSPredicate predicateWithFormat:str];

由于这是一个愚蠢的替换,我想有可能通过输入垃圾来意外“破解”谓词。

我找不到任何可以为我“神奇地引用”该值的东西。

原因是,我需要在多次迭代中构建一个复杂的谓词,所以我必须构造一个大的谓词字符串。模板不适用于 SUBQUERY。因此,我需要立即在字符串中提供值,因为我不想根据谓词格式有多少个值来进行 20 个不同的谓词初始化。

最佳答案

直接使用NSComparisonPredicate,绕过谓词格式问题。

NSPredicate *fetchPredicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"departmentName"]
                                                                 rightExpression:[NSExpression expressionForConstantValue:searchTerm]
                                                                        modifier:NSDirectPredicateModifier
                                                                            type:NSLikePredicateOperatorType
                                                                         options:0];

阅读 Predicate Programming Guide “直接在代码中创建谓词”,并检查 NSComparisonPredicate 的类引用

关于iphone - 如何防止Core Data中出现 "SQL Injection"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3076894/

相关文章:

iphone - 在我的 iPhone 应用程序上从 Facebook 获取好友信息

iphone - 在应用程序中预存大量数据

ios - 核心数据中的UIImage

iphone - EXC_BAD_ACCESS 与 NSFetchedResultsController

performance - NSDictionary VS NSArray+NSPredicate : which is faster/recommented

iphone - 开始按钮启动 NSTimer,停止按钮停止它,开始按钮再次启动它。但是 'invalidate' 给了我一个错误?

iphone - 使用 uint_fast8_t 时的性能优势?

class - Core Data NSPredicate 按实体类过滤?

ios - NSPredicate 在 CoreData 中按字母顺序获取记录

iphone - xCode4 不会在模拟器中运行应用程序