2013-07-31 63 views
0

我的CO-worker为iOS创建了下面的代码,以使用户定义的字符串SQL搜索更加安全。 即删除SQL-注入的可能性,那种事Android - 使字符串SQL安全

char * sqlSafeQuery = sqlite3_mprintf("%q",[searchTerm UTF8String]); 

searchTerm = [NSString stringWithFormat:@"%s", sqlSafeQuery]; 

sqlite3_free(sqlSafeQuery); 

有没有办法在Android的这么相似的地方?我无法看到谷歌的太多:)

谢谢。

回答

0

您可以使用prepared statements,请参阅an Android question on how to use these in sqlite。由于语句在没有用户输入的情况下被解析,参数不能改变语句本身;因此注射不会发生。

+0

准备语句不能用于返回游标的查询,这是我需要使用它的地方。感谢您的建议 –

+0

在android中,您应该使用[其中一种查询方法](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query%28java.lang.String,%20java .lang.String [],%20java.lang.String,%20java.lang.String [],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String %29),它们返回一个游标并支持prepared-statement-like语法('selection'中的问号被'selectionArgs'中的值替换)。 – dst

+0

这个我已经做了,但是我不认为像SQl注射这样的战斗物,转义字符和通配符,这就是我所担心的。 –