2012-09-19 75 views
0

我們正在使用的查詢,如下所示:什麼可能是以下查詢的SQL注入字符串?

FROM users u INNER JOIN FETCH u.roles where u.password='" + password + "'" + " AND u.username='" + username + "'"; 

爲了防止SQL注入,我們使用正則表達式過濾「用戶名」,只有允許的字符,如「^[A-ZA-Z0的白名單-9] * $「和‘密碼’字段中,我們使用的是支票,例如,

if(password.indexOf("'") != -1) { Sql injection attack } 

是否有攻擊者繞過我們用於發射成功的SQL注入攻擊檢查什麼方法?

我們正在使用MySQL V5.1

感謝,

+1

爲什麼不直接使用公認的SQL注入問題解決方案之一,比如預準備語句,ORM或存儲過程?比試圖將「壞」字符列入白名單要容易得多。 –

+2

爲什麼要跳過所有這些箍環以避免正確地查詢查詢? –

+0

順便提一句,因爲你有一個INNER JOIN,沒有任何角色但是有效密碼的用戶將被你的查詢視爲與錯誤地輸入密碼的用戶相同的方式... –

回答

1

看到,因爲它似乎主持人不同意我告訴你提高你的代碼,簡單的答案是「是的,有一個上述代碼中的缺陷「。

+0

@podilska:你能讓我知道上面代碼中的缺陷以及攻擊者如何利用它? – user1402373

+0

上述代碼中的缺陷是您正在使用外部數據構建S​​QL語句。您需要使用參數化查詢,以便您的數據和SQL保持彼此分開。 http://bobby-tables.com/有很多關於如何做參數化查詢的例子,基於你寫的任何語言。 –

相關問題