1

所以我一直在寻找最简单、最有效的方法来为我的应用程序在 SQLite 中逃避恶意字符串。这里的大多数答案通常都有正则表达式路线。我偶然发现了一个找到sqlEscapeString的答案。

有一个问题。当它转义它时,它似乎也在字符串的末尾添加了单引号,所以它从 this:Test's到: 'Test''s'。现在我真的不知道它为什么会这样做,但我希望有人能对 Android 中存在的新功能起到相反的作用。DatabaseUtils似乎没有它的伴侣功能。

4

2 回答 2

3

我想说防止恶意字符串的最有效方法是让 SQLite 完成这项工作。Android 包装了该功能并使用ContentValuesString[]Object[]参数,具体取决于您用于查询数据库的方法,以保存转义值。:

SQLiteDatabase.insert(...)

SQLiteDatabase.query(...)

SQLiteDatabase.update(...)

SQLiteDatabase.delete(...)

SQLiteDatabase.execSQL(...)

在使用上述方法时,?在你的 SQL 语句中放置一个你想要转义的字符串。

于 2012-09-01T08:37:23.240 回答
2

我为反向 sqlEscapeString() 创建了一个 unescape() 方法。

public String unescapeString(String string) {
    if (string == null)
        return null;

    StringBuilder sb = new StringBuilder(string);

    sb = sb.deleteCharAt(0);
    sb = sb.deleteCharAt(sb.length() - 1);

    return sb.toString().replaceAll("''", "'");
}
于 2014-03-28T18:48:31.167 回答