我有類似下面的代碼:使用locals()將參數傳遞給SQL查詢是否安全?
var1 = 1
var2 = 2
cursor.execute("INSERT INTO mytable VALUES (:var1, :var2)", {'var1': var1, 'var2': var2})
是否有任何理由,我應該用字典文字來傳遞參數,而不是簡單地做這樣的:
var1 = 1
var2 = 2
cursor.execute("INSERT INTO mytable VALUES (:var1, :var2)", locals())
這種感覺更簡單,更可以維持,但我不能動搖這裏有某種安全氣味的感覺。
如果查詢是硬編碼的,這並不是很糟糕。除非您的DBAPI庫真的很可怕,否則您不會傳遞任何未在網上查詢中命名的內容。 –
使用此方法可能會使不必要的數據進入數據庫。使用字典可以更好地控制插入的內容。對你來說這可能很清楚,但只要有人開始使用你的代碼,就可能發生意外的壞事。 – thepieterdc
...實際上,我*已*看到一些非常糟糕的DBAPI庫;你可能想用wireshark進行實際審計。 –