如何不做到這一點:
id = raw_input("Enter the Station ID")
query = "select foo from bar where station={station_id}"
cursor.execute(query.format(station_id=id))
如果有人進入一個惡意的SQL字符串,它會被執行。
不是使用python格式化字符串,而是讓數據庫後端爲您處理它。您的具體做法取決於您使用的數據庫。我認爲(?)這對於Oracle來說是正確的,但我無法測試它。某些數據庫使用不同的字符(例如,在SQLite的情況下,?
而不是%s
)。
id = raw_input("Enter the Station ID")
query = "select foo from bar where station=%s"
cursor.execute(query, [id])
編輯:顯然,cx_Oracle
默認爲 「名爲」 paramstyle(您可以在看看cx_Oracle.paramstyle
檢查這一點。)。在這種情況下,你可以這樣做:
query = "select foo from bar where station=:station_id"
cursor.execute(query, station_id=id)
你在問怎麼安全地做,或者怎麼做? (永遠不要相信用戶輸入... SQL注入等) –
這是真的,重新輸入...有沒有一種安全(更安全)的方式來做到這一點? –