2

データベースで動作する Python アプリケーションのプログラミングを開始しています。準備されたステートメントについて読んで、私はそれらをどのように書くべきかを見つけました:

...
strSQL = "select * from myTable where aField = $s" % (aValue)
cursor.execute(strSQL)
...

私の質問は次のとおりです。これは SQL インジェクションに対して脆弱ではありませんか? もしそうなら、どうすればそれを防ぐことができますか?

ありがとうございました

4

2 に答える 2

5

バインドされた SQL parametersの代わりに文字列書式設定演算子を使用しているため、コードは実際に SQL インジェクションの危険にさらされています ( を修正すると、タイプミスと見なされます)。$s

正しい形式は次のとおりです。

strSQL = "select * from myTable where aField = %s"
cursor.execute(strSQL, [aValue])
于 2013-04-25T18:32:33.857 に答える
1

あなたがそれを持っている方法、絶対に!これが、SQL インジェクションを回避する方法です。

strSQL = "select * from myTable where aField = %s"
cursor.execute(strSQL, [aValue])

値をリスト/タプルとしてカーソル実行の 2 番目の引数に渡します

于 2013-04-25T18:32:56.567 に答える