【发布时间】:2013-12-28 19:09:15
【问题描述】:
我猜我在第一行得到了错误!请帮我处理它。我基本上是在尝试通过我的前端执行查询
try {
ResultSet rs=st.executeQuery("select *from Login Username ='"+username+"' and Password '"+password+"'");
rs.last();
int counter = rs.getRow();
if (counter==1){
JOptionPane.showMessageDialog(null,"Username and Password Correct","Username and Password Correct",JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
new Menu().setVisible(true);
hide();
}else{
jt_username.setText("");
jp_password.setText("");
JOptionPane.showMessageDialog(null,"Error","Username and Password Incorrect",JOptionPane.INFORMATION_MESSAGE);
}
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
【问题讨论】:
-
我已经用 where 语句替换了我的代码,但现在它显示了 com.microsoft.sqlserver.jdbc.SQLServerexception:incorrect syntax near"。
-
我可以看到有四个错误。 (1)您不应该以纯文本形式存储密码,对它们进行哈希处理。 (2) 在登录名和用户名之间缺少
WHERE(3) 在密码之后缺少=。 (4) 易受 SQL 注入影响。使用参数化查询。 -
非常感谢您的帮助我已经解决了错误,现在它工作得很好:)
-
如果您所做的只是修复了语法错误,那么它没有工作正常。它将破坏包含单引号的密码/用户名。这也将允许 SQL 注入允许您的登录被完全绕过(或更糟)。
标签: java sql sql-server sql-server-2008 jdbc