teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

文章しゅうせいだぞ

2019/12/21 09:30

投稿

退会済みユーザー
answer CHANGED
@@ -37,7 +37,7 @@
37
37
 
38
38
  みてぇになる。
39
39
 
40
- これをオプティマイザが解析してクエリの実行計画を立てると、UPDATE文が意図せず無作為に実行れてデータベースが不正に書き換えられちまうって寸法だ。
40
+ これをオプティマイザが解析してクエリの実行計画を立てると、WHERE文がコメントアウトされたせいでUPDATE文が意図せず無作為に実行れてデータベースが不正に書き換えられちまうって寸法だ。
41
41
 
42
42
  だけんども、今回発行してるクエリは
43
43
 

2

修正の修正だぞ。

2019/12/21 09:30

投稿

退会済みユーザー
answer CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
  ```
35
- UPDATE Goods SET GoodsName='';---', Price=? WHERE GoodsID=?
35
+ UPDATE Goods SET GoodsName=''; ---', Price=? WHERE GoodsID=?
36
36
  ```
37
37
 
38
38
  みてぇになる。
@@ -49,7 +49,7 @@
49
49
 
50
50
  その後で、 ? の場所に値をバインドする。
51
51
 
52
- 既にクエリの実行計画は立ててあから誤ってSELECT文が発行されちまう事は絶対にねぇ。
52
+ 既にクエリの実行計画は立ててあからおかしなUPDATE文が発行されちまう事は絶対にねぇ。
53
53
  ? の場所に値をバインドしてくだけだ。
54
54
 
55
55
  SQLインジェクションってぇのは、構文も値も全部ひとかたまりの文字列としてデータベースに渡されて意図しない形で解析されっから起こる。

1

こっちのほうが分かりやしぃなぁ、

2019/12/21 09:29

投稿

退会済みユーザー
answer CHANGED
@@ -25,19 +25,19 @@
25
25
  例えばGoodsNameの値が
26
26
 
27
27
  ```
28
- '; SELECT * FROM Goods; ---
28
+ '; ---
29
29
  ```
30
30
 
31
31
  だったりして、これが直接埋め込まれた場合、
32
32
 
33
33
 
34
34
  ```
35
- UPDATE Goods SET GoodsName=''; SELECT * FROM Goods; ---', Price=? WHERE GoodsID=?
35
+ UPDATE Goods SET GoodsName='';---', Price=? WHERE GoodsID=?
36
36
  ```
37
37
 
38
38
  みてぇになる。
39
39
 
40
- これをオプティマイザが解析してクエリの実行計画を立てると、SELECT文がれちまうって寸法だ。
40
+ これをオプティマイザが解析してクエリの実行計画を立てると、UPDATE文が意図せず無作為に実行れてデータベースが不正に書き換えられちまうって寸法だ。
41
41
 
42
42
  だけんども、今回発行してるクエリは
43
43