【发布时间】:2021-10-17 11:43:03
【问题描述】:
我最初使用以下代码来验证有效的用户登录
public static boolean validate(String name, String password) {
boolean status = false;
try {
Connection con = DB.getConnection();
String select = "select * from Librarian where UserName= '" + name + "' and Password='"+ password +"'";
Statement selectStatement = con.createStatement();
ResultSet rs = selectStatement.executeQuery(select);
status = rs.next();
con.close();
} catch (Exception e) {
System.out.println(e);
}
return status;
}
我发现使用准备好的语句更好,并且上面的语句容易受到 SQL 注入的影响。下面是我尝试使用的代码
public static boolean validate(String name, String password) {
boolean status = false;
try {
Connection con = DB.getConnection();
PreparedStatement ps = con.prepareStatement("select * from Librarian where UserName= ? and password = ?");
ps.setString(1, name);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
con.close();
} catch (Exception e) {
System.out.println(e);
}
return status;
}
这不是验证用户,我无法访问应用程序。任何帮助将不胜感激。
【问题讨论】:
-
您在第二个区块中忘记了
status = rs.next();。 -
请注意,(1) 您应该永远 将密码存储在数据库中(使用 password 哈希代替),以及 (2) 教育除外出于目的,您不应编写自己的安全代码;相反,请使用社区已经审查过的库。
-
使用密码哈希会影响验证码吗?
标签: java sql prepared-statement