2011-06-24 111 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注入