2014-01-14 36 views
0

請讓我知道會下列代碼100%防止SQL注入蟒蛇將這個代碼防止SQL注入(Python)的

樣本1

username = request.GET('username') # non-filtered user input 
connection.execute("SELECT id,name,email FROM user WHERE username=%s LIMIT 1", (username,)) 

樣品2

username = request.POST('username') # non-filtered user input 
name = request.POST('name') # non-filtered user input 
email = request.POST('email') # non-filtered user input 
connection.execute("UPDATE user SET name=%s, email= %s WHERE username=%s LIMIT 1", (name, email, username,)) 

回答

2

%s的概念是從查詢中分離數據。當你傳遞兩個參數時,它們被組合在模塊中。它的目的是減輕注射,但我很猶豫,說「100%」

編輯:許多聰明比我(!甚至現實生活中的安全專家)在這裏也稱: https://security.stackexchange.com/questions/15214/are-prepared-statements-100-safe-against-sql-injection

+0

即使我不會說「100%」,我會說,對於任何問這個問題的人來說,數據庫庫可能會比你做的更好,所以它幾乎肯定是正確的答案。這就是爲什麼dbapi-2.0和實現它的每個數據庫庫都建議使用參數,並鏈接到[xkcd](http://xkcd.com/327/)。 – abarnert

+0

同意。不要把它看作一個銀行網站的面值,但要做到這一點,並找到一個更大的漏洞。 – mhlester

+1

這是正確的做法。爲什麼你會毫不猶豫地說100%? –