gpt4 book ai didi

objective-c - FMDB避免sql注入(inject)

转载 作者:行者123 更新时间:2023-12-03 18:28:18 26 4
gpt4 key购买 nike

我正在开发一个基于原始 sqlite 的项目,并且我已将其更改为 FMDB。

所有查询都是参数化的。

这是一个这样的例子:

 NSString* sqlQuery = [NSString stringWithFormat:@"SELECT COUNT(*) FROM Contacts WHERE FirstName='%@' AND LastName='%@'", fName,lName];

我将它传递给我的助手类:
 NSInteger count = [[[DB sharedManager] executeSQL:sqlQuery] integerValue];

助手类:
- (NSString*)executeSQL:(NSString *)sql
{
__block NSString *resultString = @"";
[_secureQueue inDatabase:^(FMDatabase *db) {
FMResultSet *results = [db executeQuery:sql];
while([results next]) {
resultString= [results stringForColumnIndex:0];
}
}];
return resultString;
}

我可以做一个解决方法,例如:
    sql = @"SELECT COUNT(*) FROM Contacts WHERE FirstName=? AND LastName=?"
[db executeQuery:sql,firstParam, secondParam]

但我不想更改辅助方法,我需要将更改/更新的 sql 查询传递给我的辅助方法。

我该如何改变这个:
NSString* sqlQuery = [NSString stringWithFormat:@"SELECT COUNT(*) FROM Contacts WHERE FirstName='%@' AND LastName='%@'", fName,lName];

类似于:
NSString* sqlQuery = [NSString stringWithFormat:@"SELECT COUNT(*) FROM Contacts WHERE FirstName=? AND LastName=?", fName,lName];

最佳答案

如果您想避免 SQL 注入(inject)问题,那么您绝不能使用 stringWithFormat 构建查询。 .您必须正确地将变量绑定(bind)到查询中。时期。讨论完毕。

所以你别无选择,只能改变你的助手。让它接受两个参数而不是一个。第一个是正确使用 ? 的查询。第二个是绑定(bind)到查询中但辅助方法的值数组。

关于objective-c - FMDB避免sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44809596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com