Android应用程序已经使用ActiveAndroid开发
public static List<ModelNames> search(String pattern) {
return new Select().from(ModelNames.class)
.where("title LIKE '%" + pattern + "%' or content LIKE '%" + pattern + "%'")
.orderBy("title")
.execute();
}
现在它容易出现SQL注入。
有没有人遇到过类似的问题并找到了解决方案,或者有人能为此提供解决方案吗?
在github上发现问题,但无法获得正确的解决方案。
答案 0 :(得分:2)
examples on the website显示如何使用占位符:
public static List<ModelNames> search(String pattern) {
pattern = "%" + pattern + "%";
return new Select().from(ModelNames.class)
.where("title LIKE ? or content LIKE ?", pattern, pattern)
.orderBy("title")
.execute();
}
答案 1 :(得分:1)
我所做的是假设用户输入的所有内容都是威胁,所以我会将所有内容保存到像usUsername这样的变量中,其中&#34; us&#34;意味着不安全。之后,我检查每个&#34; us&#34; -variable进行注射,结果是sUsername(s表示安全)。因此,当我构建查询时,我只能使用s-varaibles,并且在大多数情况下应该是安全的。
这个想法完全取自这里:http://www.joelonsoftware.com/articles/Wrong.html
此question已经提及。
答案 2 :(得分:1)
我找到了一个解决方法,但我让其他人回答了更好的建议,尊重ActiveAndroid ORM。
以下是解决方法:
public static List<ModelNames> search(String pattern) {
return new Select().from(ModelNames.class)
String pattern = DatabaseUtils.sqlEscapeString(searchBar.getText().toString());
pattern = pattern.substring(1, pattern.length());
pattern = pattern.substring(0, pattern.length()-1);
.where("title LIKE '%" + pattern + "%' or content LIKE '%" + pattern + "%'")
.orderBy("title")
.execute();
}