2017-10-17 83 views
1

私はこのSOの質問を読んでいました:psycopg2: insert multiple rows with one queryそして、私は、一連のsqlの挿入を高速化するためにcursor.mogrifyを使った素晴らしい答えが含まれていることがわかりました。それは私には、cursor.mogrifyは正常にすべてのSQLインジェクションの脆弱性をエスケープするのだろうか?次のようにpsychopg2:cursor.mogrifyはSQLインジェクションを防止しますか?

Alex Rileyによって投稿の答えのためのコードはでした:

args_str = ','.join(cur.mogrify("(%s,%s,%s,%s,%s,%s,%s,%s,%s)", x) for x in tup) 
cur.execute("INSERT INTO table VALUES " + args_str) 

誰もがcursor.execute関数内の文字列補間でそれをフォローアップその後、psychopg2のcursor.mogrifyメソッドを使用して、このメソッドに任意の脆弱性を知っていますこのような?

答えて

1

psycopg2は、サーバー側のプリペアドステートメントとバインドパラメータをまったく使用しません。実際には文字列補間ですべてのクエリを実行しますが、引用規則を慎重に尊重し、安全な方法で行います。

cursor.mogrifyは、psycopg2がSQL文字列にパラメータを補間してサーバーに送信するときに使用するロジックとまったく同じロジックを手動で呼び出すだけです。

これは安全です。あなたのコードになぜあなたがそれをやっているのか、それがなぜ安全であるのかを説明するコメントがあることを確認してください。

ただし、個人的には、この方法を避けてCOPY supportを使用することをおすすめします。

+0

私はこれが受け入れられると感じましたが、私は大変感謝してくれてありがとう!ありがとう! – Lionel

関連する問題