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注入
答案 0 :(得分:5)
您需要使用PreparedStatement
类并添加参数。
请参阅文档。
答案 1 :(得分:2)
您可以通过清除username
和password
来执行此操作,以便它们不会包含危险字符,无论是通过转义还是删除它们。
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注入