2011-06-24 145 views
1

修改代碼以防止SQL注入的SQL注入

下面的Java小服務程序代碼,用於執行一個登錄功能,示出了通過接受用戶輸入的脆弱性,而不執行適當的輸入驗證或逸出元字符:

String sql = "select * from user where username='" + username +"' and password='" + password + "'"; 
stmt = conn.createStatement(); 
rs = stmt.executeQuery(sql); 
if (rs.next()) { 
loggedIn = true; 
    out.println("Successfully logged in"); 
} else { 
    out.println("Username and/or password not recognized"); 
} 

================

現在請告訴我怎麼才能修改此代碼,使其免受SQL注入自由

回答

5

您需要使用PreparedStatement類並添加參數。

請參閱文檔。

2

您可以通過清理usernamepassword來完成此操作,以便它們不包含危險字符,無論是通過轉義還是刪除它們。

This可能會更好地解釋問題。

+0

+1對於xkcd引用 –

0

如果你在運行時提供的值,你應該利用PreparedStatement特定的SQL查詢,

你應該更好地使用沿表單標記(在例如:index.html,login.jsp等視圖頁中)方法作爲POST而不是GET來克服SQL注入