【问题标题】:How to prevent "SQL Injection" in Core Data?如何防止 Core Data 中的“SQL 注入”?
【发布时间】:2011-03-05 20:22:47
【问题描述】:

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

代替:

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

我想做:

NSString *str = [NSString stringWithFormat:@"departmentName like[c] '%@'", departmentName]; [NSPredicate predicateWithFormat:str];

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

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

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

【问题讨论】:

    标签: iphone core-data nspredicate


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 2011-09-10
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多