回答編集履歴
9
追記
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
|
10
10
|
|
11
|
-
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStr
|
11
|
+
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStr,d,idの型によりますが、`SQL Injection`が実行可能なコードになります。
|
12
12
|
|
13
13
|
|
14
14
|
|
8
totalに加算するということはdは数値型相当なため問題ないので、訂正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
|
10
10
|
|
11
|
-
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とdの型によりますが、`SQL Injection`が実行可能なコードになります。
|
11
|
+
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とbodyStrとidの型によりますが、`SQL Injection`が実行可能なコードになります。
|
12
12
|
|
13
13
|
|
14
14
|
|
7
検証ではなくサニタイジング(無害化)なため言葉を訂正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
|
10
10
|
|
11
|
-
|
11
|
+
サニタイジング(無害化)を行っていない限り、画面のレイアウト定義とdの型によりますが、`SQL Injection`が実行可能なコードになります。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
case 0:
|
46
46
|
|
47
|
-
// 対象データなし
|
47
|
+
// 更新対象データなし
|
48
48
|
|
49
49
|
Log.e("sql", stmt.toString());
|
50
50
|
|
@@ -61,6 +61,8 @@
|
|
61
61
|
default:
|
62
62
|
|
63
63
|
// 複数件(データ不整合)
|
64
|
+
|
65
|
+
// 本当に起こり得ないなら、特別なエラー処理を行った方がいいです。
|
64
66
|
|
65
67
|
Log.e("sql", stmt.toString());
|
66
68
|
|
6
ローカル環境で適当なテーブルを作って動作確認したので訂正
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します。
|
20
20
|
|
21
|
-
|
21
|
+
こんな感じになります。
|
22
22
|
|
23
23
|
|
24
24
|
|
5
stmt.closeを2回実行しているので、訂正!
test
CHANGED
@@ -66,12 +66,6 @@
|
|
66
66
|
|
67
67
|
break;
|
68
68
|
|
69
|
-
}
|
70
|
-
|
71
|
-
}finally {
|
72
|
-
|
73
|
-
stmt.close();
|
74
|
-
|
75
69
|
}
|
76
70
|
|
77
71
|
}finally {
|
@@ -84,4 +78,8 @@
|
|
84
78
|
|
85
79
|
■参考情報
|
86
80
|
|
87
|
-
[SQLiteStatement](https://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html)
|
81
|
+
- [SQLiteStatement](https://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html)
|
82
|
+
|
83
|
+
- [SQLiteProgram](https://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html)
|
84
|
+
|
85
|
+
- [ContentValues](https://developer.android.com/reference/android/content/ContentValues.html)
|
4
インデントとuuidをbindStringに変更
test
CHANGED
@@ -36,37 +36,43 @@
|
|
36
36
|
|
37
37
|
stmt.bindLong(2, d);
|
38
38
|
|
39
|
-
stmt.bind
|
39
|
+
stmt.bindString(3, id);
|
40
40
|
|
41
41
|
row_count = stmt.executeUpdateDelete();
|
42
42
|
|
43
|
-
|
43
|
+
switch(row_count) {
|
44
44
|
|
45
|
-
|
45
|
+
case 0:
|
46
46
|
|
47
|
-
|
47
|
+
// 対象データなし
|
48
48
|
|
49
|
-
|
49
|
+
Log.e("sql", stmt.toString());
|
50
50
|
|
51
|
-
|
51
|
+
break;
|
52
52
|
|
53
|
-
|
53
|
+
case 1:
|
54
54
|
|
55
|
-
|
55
|
+
// 正常時:更新件数が1件の時
|
56
56
|
|
57
|
-
|
57
|
+
Log.d("sql", String.valueOf(row_count));
|
58
58
|
|
59
|
-
|
59
|
+
break;
|
60
60
|
|
61
|
-
|
61
|
+
default:
|
62
62
|
|
63
|
-
|
63
|
+
// 複数件(データ不整合)
|
64
64
|
|
65
|
-
|
65
|
+
Log.e("sql", stmt.toString());
|
66
66
|
|
67
|
-
|
67
|
+
break;
|
68
68
|
|
69
69
|
}
|
70
|
+
|
71
|
+
}finally {
|
72
|
+
|
73
|
+
stmt.close();
|
74
|
+
|
75
|
+
}
|
70
76
|
|
71
77
|
}finally {
|
72
78
|
|
3
if文からswitchに変更!
test
CHANGED
@@ -40,11 +40,33 @@
|
|
40
40
|
|
41
41
|
row_count = stmt.executeUpdateDelete();
|
42
42
|
|
43
|
-
i
|
43
|
+
switch(row_count) {
|
44
44
|
|
45
|
-
|
45
|
+
case 0:
|
46
46
|
|
47
|
+
// 対象データなし
|
48
|
+
|
49
|
+
Log.e("sql", stmt.toString());
|
50
|
+
|
51
|
+
break;
|
52
|
+
|
53
|
+
case 1:
|
54
|
+
|
55
|
+
// 正常時:更新件数が1件の時
|
56
|
+
|
57
|
+
Log.d("sql", String.valueOf(row_count));
|
58
|
+
|
59
|
+
break;
|
60
|
+
|
61
|
+
default:
|
62
|
+
|
63
|
+
// 複数件(データ不整合)
|
64
|
+
|
65
|
+
Log.e("sql", stmt.toString());
|
66
|
+
|
67
|
+
break;
|
68
|
+
|
47
|
-
}
|
69
|
+
}
|
48
70
|
|
49
71
|
}finally {
|
50
72
|
|
2
追記
test
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
[EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。
|
7
|
+
[EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。画面の入力項目の値をSQLにそのまま渡していると仮定して回答しますが、
|
8
8
|
|
9
9
|
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
|
10
10
|
|
11
|
-
`SQL Injection`の検証をしていない限り、dの型
|
11
|
+
`SQL Injection`の検証をしていない限り、dの型によりますが、`SQLInjection`が可能なコードになります。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します
|
19
|
+
質問文にはテーブル定義やテーブルデータが無いため、データの型を推測して回答します。
|
20
20
|
|
21
21
|
動作確認してませんが、こんな感じに。あとは頑張ってくださいな。
|
22
22
|
|
1
追記
test
CHANGED
@@ -4,9 +4,11 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
[EditText](https://developer.android.com/reference/android/widget/EditText.html)は画面の項目ですよね。
|
8
|
+
|
7
9
|
質問文のコードはdb#execSQLが引数で渡されたSQL文字列に対して、
|
8
10
|
|
9
|
-
`SQL Injection`の検証をしていない限り、`SQLInjection`が可能なコードになります。
|
11
|
+
`SQL Injection`の検証をしていない限り、dの型と値によりますが、`SQLInjection`が可能なコードになります。
|
10
12
|
|
11
13
|
|
12
14
|
|