1

そのため、自分のアプリの SQLite で悪意のある文字列を回避する最も簡単で効率的な方法を探していました。ここでのほとんどの回答には、通常、正規表現ルートに沿ったものがあります。sqlEscapeStringを見つけた1つの答えに出くわしました。

1 つの問題があります。エスケープすると、文字列の末尾に一重引用符も追加されるように見えるため、 this:Test'sから: に移動します'Test''s'。なぜそうしているのかはよくわかりませんが、Androidに存在する反対の機能の新しい人を期待していました。DatabaseUtilsコンパニオン機能はないようです。

4

2 に答える 2

3

悪意のある文字列から保護するための最も効率的な方法は、SQLiteにその仕事をさせることだと思います。Androidはその機能をラップし、データベースのクエリに使用するメソッドに応じてContentValues、、、 String[]または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 に答える