2017-10-17 121 views
1

我正在讀這個SO問題:psycopg2: insert multiple rows with one query,我發現有一個很好的答案,包括使用cursor.mogrify來加速一系列的SQL插入。它讓我想知道,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) 

有誰知道任何漏洞,使用psychopg2的cursor.mogrify方法,然後這種方法與在cursor.execute功能的串插採取後續行動喜歡這個?

回答

1

psycopg2根本不使用服務器端預處理語句和綁定參數。它實際上通過字符串插值執行所有查詢,但它仔細考慮引用規則並以安全的方式執行。

cursor.mogrify只是一個手動調用,它與psycopg2在將參數插入SQL字符串中時使用的邏輯完全相同,然後將其發送到服務器。

這樣做是安全的。只要確保你的代碼有解釋你爲什麼這樣做的原因以及爲什麼它是安全的。

但是,我個人建議避免使用此方法來支持使用其COPY support

+0

我有這樣的感覺,這是可以接受的,但我非常感謝理智檢查,謝謝! – Lionel