Active Android易于进行SQL注入。任何已知的方案?

时间:2015-12-22 09:55:18

标签: android sqlite sql-injection activeandroid

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上发现问题,但无法获得正确的解决方案。

3 个答案:

答案 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();
}

参考:sqlEscapeString