我编写了以下部分,它是一个Java方法,带有两个STRING参数login和pass,表示用户的登录名和密码,以检查用户是否在数据库表中找到。
Statement stmt = connection.createStatement();
ResultSet rs = statement.executeQuery ("SELECT * FROM users WHERE username = '"
+ login + "' AND passwd = '" + pass + "'");
测试时的代码工作正常。我在一本书中读到,有些情况下它可能会产生SQL错误,但它没有提到上述代码可能导致SQL错误的情况。你能否简单地告诉我这些情况?此外,我如何编写一个代码版本,以防止发生此类错误的可能性?
答案 0 :(得分:0)
第一个问题是这段代码对SQL Injection
是可以理解的。为了狂热,您可以使用Prepared Statements
。这可能是本书可能讨论的一个潜在威胁。
http://www.unixwiz.net/techtips/sql-injection.html
使用预准备陈述的例子
String query = "SELECT * FROM users WHERE username = ? AND passwd = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, login);
ps.setString(2, passwd);
Resultset rs = rs = ps.executeQuery();
答案 1 :(得分:0)
你应该编写prevent sql注入的代码。使用PreparedStatement
(参数化语句)和Stored proc
而不是硬编码的sql字符串。