0

複数のデータベース挿入/更新クエリを持つアプリに取り組んでおり、アプリ全体で使用しています

SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values)

任意のデータを任意のテーブルに挿入するメソッド。つまり、ContentValues オブジェクトを作成し、すべての値をこのオブジェクト内にキーと値のペアとして配置し、このメソッドに渡します。

contentValues.put("col1", valueCol1);
contentValues.put("col2", valueCol2);
contentValues.put("col3", valueCol3);

したがって、レコードを sqlite テーブルに挿入するこの方法が優れているかどうか、または executeSQL [SQLinjection の観点から] を使用する方が優れているかどうかを確認したかっただけです。ここのドキュメントに従って理解しています

[http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String)][1]

execSQL よりも挿入を使用することをお勧めします。しかし、SQLInjections が発生しやすいのはどれか 1 つでもあります。入力/提案。

4

1 に答える 1

1

リンクしたページで提案されているように

「代わりに、可能であれば、insert(String, String, ContentValues)、update(String, ContentValues, String, String[]) などを使用することをお勧めします。」

可能なときに使用する必要insert()があります。

SQL インジェクション リクエストを回避するには、SQL ステートメントとそれに含まれるデータを明確に区別する必要があります。ContentProvider の query()、update()、および delete() メソッドと、Activity の managedQuery() メソッドはすべて、パラメーター化をサポートしています。これらのメソッドはすべて、「String[] selectionArgs」パラメーターを受け取ります。これは、「?」の代わりにクエリ文字列に代入される一連の値です。クエスチョン マークの順に表示されます。これにより、「selection」パラメーター内の SQL ステートメントの内容と含まれるデータが明確に分離されます。【モバイルアプリのセキュリティ】

したがって、またはinsert()のようなメソッドは sql-injection を使用しない必要があります。update()delete()

コンテンツ プロバイダーでサポートされている、パラメーター化されたクエリ メソッドを常に使用する必要があります。

コンテンツ プロバイダーにアクセスするときは、query()、update()、delete() などのパラメーター化されたクエリ メソッドを使用して、信頼できないソースからの潜在的な SQL インジェクションを回避します。メソッドに送信する前にユーザー データを連結して選択引数を作成する場合、パラメーター化されたメソッドを使用するだけでは十分ではないことに注意してください。

ここを参照

于 2013-08-09T08:10:05.537 に答える