クエリを不適切に作成しています。文字列形式を使用してクエリ文字列を作成しないでください。ほとんどの場合、次のようなことをしています。
NSString *title = ... // some title that might have "special characters"
NSString *query = [NSString stringWithFormat:@"select * ... and outlineTitle='%@'", title];
これは、クエリを作成するための非常に悪い方法です。適切な方法は、プリペアドステートメントを使用することです。
NSString *title = ... // some title that might have "special characters"
sqlite3_stmt *stmt = NULL;
sqlite3_prepare_v2(dbHandle, "SELECT * FROM green WHERE outlineTitle = ?", -1, &stmt, nil);
sqlite3_bind_text(stmt, 1, [title UTF8String], -1, SQLITE_TRANSIENT);
?
クエリで使用してから適切なメソッドを使用することによりsqlite3_bind_xxx
、すべての値が適切にエスケープされ、引用符で囲まれます。これにより、一重引用符やその他の文字の問題が修正されます。これにより、潜在的なSQLインジェクション攻撃も修正されます。