我們正在使用的查詢,如下所示:什麼可能是以下查詢的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
感謝,
爲什麼不直接使用公認的SQL注入問題解決方案之一,比如預準備語句,ORM或存儲過程?比試圖將「壞」字符列入白名單要容易得多。 –
爲什麼要跳過所有這些箍環以避免正確地查詢查詢? –
順便提一句,因爲你有一個INNER JOIN,沒有任何角色但是有效密碼的用戶將被你的查詢視爲與錯誤地輸入密碼的用戶相同的方式... –