2016-03-04 55 views
0

按照psycopg2文檔(http://initd.org/psycopg/docs/connection.html)就指出:Python的psycopg2串插格式VS%

Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint. 

在警告它專門引用沒有做這樣的事情:

cur.execute(SQL % data) 

該警告也適用於以下使用格式?

cur.execute(SQL.format(data)) 

我不知道格式的內容,但是我假設它是用%字符串互操作其下將使得它的使用不妥當

回答

0

SQL.format()(其中SQL是一個普通的醇」 Python字符串)沒有按實際上在底層使用%插值,但它具有相同的缺陷:您替換的值對於SQL沒有正確轉義(它們怎麼可能是這樣; Python不知道SQL是SQL語句)並且您的SQL語句可以然後受到注射攻擊。

您的各種SQL模塊都有防止此問題的方法,您應該改用它們。

0

是的,它的確如此。字符串插值方法很脆弱,因爲它們允許SQL注入攻擊。使用外部(用戶提供的)數據作爲參數化查詢中的參數(而不是構建查詢字符串)使得這種攻擊成爲不可能。

+0

我相信你的意思是可能的*,而不是不可能的 – user1077071

+0

@ user1077071澄清。 –