1 年,3 月
Questions & Answers
108
String sSQL = "select RFC,Contraseña from Administradores where RFC='" + txtUsuario.getText() + "' and Contraseña='" + txtContrasena.getText() + "'";
String[] registros = new String[2];
Try {
conect();
conexion = DriverManager.getConnection("jdbc:sqlite:" + base);
Statement stat = conexion.createStatement();
ResultSet rs = stat.executeQuery(sSQL);
while (rs.next()) {
registros[0] = rs.getString("RFC");
registros[1] = rs.getString("Contraseña");
}
stat.close();
conexion.close();
} catch (SQLException ex)
{
JOptionPane.showMessageDialog(null,"DB connection error");
}
if ((txtContrasena.getText().equals(registros[1])) || (txtUsuario.getText().equals(registros[0]))) {
JOptionPane.showMessageDialog(null, "Access Granted");
Escoger variable = new Escoger();
variable.setVisible(true);
dispose();
} else {
if (txtContrasena.getText() != (registros[1])) {
JOptionPane.showMessageDialog(null, "Incorrect password");
}
}
# 1 楼答案
此外,永远不要在数据库中存储密码。您应该在数据库中存储密码的散列版本,要检查密码,您需要对给定的密码进行散列(安全地,如果通过web,则为https),并将该散列值与数据库中的散列值进行比较。使用安全哈希算法(例如,不是MD5)。更好的方法是,将用户名和密码连接起来并对其进行散列,然后将其作为值存储在数据库中并进行比较(这样,具有相同密码的两个用户就不会对相同的值进行散列)
# 2 楼答案
这个
会自动暗示是的。输入到
txtUsuario
和txtContrasena
的任何内容都可能包含有效的SQL代码,可以由数据库的SQL引擎执行您应该使用:
然后你需要改变
到
有关更多详细信息,请查看Using Prepared Statements
# 3 楼答案
对。改用PreparedStatements。用占位符替换用户和密码值