修改代码以防止SQL注入

时间:2011-06-24 16:01:03

标签: jdbc

SQL注入的示例

以下用于执行登录功能的Java servlet代码通过接受用户输入来说明漏洞,而无需执行足够的输入验证或转义元字符:

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注入

4 个答案:

答案 0 :(得分:5)

您需要使用PreparedStatement类并添加参数。

请参阅文档。

答案 1 :(得分:2)

您可以通过清除usernamepassword来执行此操作,以便它们不会包含危险字符,无论是通过转义还是删除它们。

This可能会更好地解释问题。

答案 2 :(得分:2)

使用预准备语句而不是构建自己的查询字符串:http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

答案 3 :(得分:0)

如果要在运行时向特定的sql查询提供值,则应使用preparedStatement,

与你一起应该更好地使用表单标签(在例如:index.html,login.jsp等的视图页面中)方法作为POST而不是GET来克服SQL注入