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

回答編集履歴

2

追記

2019/08/01 01:26

投稿

退会済みユーザー
answer CHANGED
@@ -4,4 +4,43 @@
4
4
 
5
5
  ・・・ということです。
6
6
 
7
- 漫画は、ユーザー入力を文字列連結するようなコーディングだったので、ユーザーに drop... という文字列を入力され、結果、テーブルがまるごとドロップされてしまったということです。
7
+ 漫画は、ユーザー入力を文字列連結するようなコーディングだったので、ユーザーに drop... という文字列を入力され、結果、テーブルがまるごとドロップされてしまったということです。
8
+
9
+ **【追記】**
10
+
11
+ 下の 2019/08/01 10:10 の私のコメントで「長くなりますので回答欄に追記します」と書きましたが、それを以下に書きます。
12
+
13
+ > 漫画にこだわらないで、ドキュメントの本質を見ようよ。ってことですね。
14
+
15
+ 質問者さんの本来の疑問は漫画の意味ではなくて、[https://docs.python.org/ja/2.7/library/sqlite3.html](https://docs.python.org/ja/2.7/library/sqlite3.html) に書いてあった「SQL インジェクション攻撃に対し脆弱」になるのは何故かで、対策として以下のようにクエリをパラメータ化するということが書いてあったが理解できない。
16
+
17
+ ```
18
+ # Never do this -- insecure!
19
+ symbol = 'RHAT'
20
+ c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
21
+
22
+ # Do this instead
23
+ t = ('RHAT',)
24
+ c.execute('SELECT * FROM stocks WHERE symbol=?', t)
25
+ ```
26
+
27
+ 漫画を読めば理解できると思ったがやっぱり理解できない・・・ということで今回の質問に至ったと勝手に理解してます。
28
+
29
+ 違いますか?>質問者さん
30
+
31
+
32
+ > 「パラメータ化」って言葉を選んだのにもなんか理由があったりしますか? 「プリペアドステートメントを使用する」って表現が一般的な気がしますが、使い分けの理由があれば知りたいです。
33
+
34
+ 自分的には「SQL インジェクション防止」⇒「クエリのパラメータ化」という言葉が出てくるということです。質問者さんが参考にされている記事にも "**パラメータ**割り当てを使います" とありましたし。
35
+
36
+ パラメータ化のもう一つのメリットにパフォーマンスの向上がありますが、そちらに目が行くと「プリペアドステートメント」という言葉も出てくるかもしれませんが。
37
+
38
+ #SQL Server の場合の自分的な理解ですが、クエリをパラメータ化するというのはリテラルの部分をプレースホルダを使って記述すること。パラメータの入力はリテラルとして扱われるから SQL インジェクション攻撃を防ぐことができる・・・ということで、「SQL インジェクション」と言われると「パラメータ化」という言葉しか出てきません。
39
+
40
+ パラメータ化クエリ
41
+ [http://surferonwww.info/BlogEngine/post/2012/02/02/Parameterized-query.aspx](http://surferonwww.info/BlogEngine/post/2012/02/02/Parameterized-query.aspx)
42
+
43
+ #これは質問者さんにとってはどうでもいい話かもしれませんが、もう一つ副次的な効用があって、SQL Server + SqlClient でパラメータ化クエリを使用すると、照合順序の違いによる文字化けに悩むことがなくなるというメリットもあります。
44
+
45
+ パラメータ化の副次的な効用
46
+ [http://surferonwww.info/BlogEngine/post/2016/06/04/use-parameterized-query-to-avoid-unexpected-character-corruption.aspx](http://surferonwww.info/BlogEngine/post/2016/06/04/use-parameterized-query-to-avoid-unexpected-character-corruption.aspx)

1

訂正

2019/08/01 01:26

投稿

退会済みユーザー
answer CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
  ・・・ということです。
6
6
 
7
- 漫画はユーザー入力を文字列連結するようなコーディングだったので、ユーザーに drop... という文字列を入力され、結果、テーブルがまるごとドロップされてしまったということです。
7
+ 漫画はユーザー入力を文字列連結するようなコーディングだったので、ユーザーに drop... という文字列を入力され、結果、テーブルがまるごとドロップされてしまったということです。