2017-05-18 36 views
1
删除表

我对SQL查询的Java代码如何注入SQL命令在Java

String sqlSt="INSERT INTO users(id,name,place) values ("+null+",'"+request.getParameter("name")+"','"+request.getParameter("place")+"');"; 

我已经尝试了 name= a'); DROP TABLE users; -- 以及 place =a'); DROP TABLE users; --

但它返回一个Ecxeption如下所示

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以找到在DROP TABLE用户附近使用的正确语法; - ','chennai')'在第1行

注意:当我在mysql命令行中尝试相同时。有效!!!!我不知道在JDBC

+0

看到http://stackoverflow.com/questions/10797794/multiple-queries-executed-in-java-in-single-statement –

+0

注意,与+的问题查询也可以来自一些名为“L'albatros”的报价,例如 –

+0

为什么不试试name = a和place = a');掉桌用户; - –

回答

2

真正的问题实际上是JDBC,它只允许一个SQL,如果你不告诉它,否则。 看这个问题的详细信息:

Multiple queries executed in java in single statement

而且我会尝试这个代替,名字=

a',''); DROP TABLE users; -- 

既然你specificed在你插入3列:

(id,name,place) 

您需要提供sql的3个值才能生效,而不仅仅是2.

你也可以发送文本null,发送一个Java空值是没有必要的,我甚至不知道如何工作。我认为这可能会更好:

String sqlSt="INSERT INTO users(id,name,place) values (null,'"+request.getParameter("name")+"','"+request.getParameter("place")+"');"; 
+0

WoW !!谢谢.....刚刚添加的属性,以允许多个查询的URL它自我.....工作! –

0

而不是空的会发生什么,用一个空字符串''

String sqlSt = "INSERT INTO users(id, name, place) values ('', '" + request.getParameter("name") + "', '" + request.getParameter("place") + "');"; 

这是更好地使用准备好的语句,以避免混乱。

String sqlSt = "INSERT INTO users(id, name, place) values ('', ?, ?)"; 
PreparedStatement ps = null; 
try { 
    ps = connection.prepareStatement(query); 
    ps.setString(1, request.getParameter("name")); 
    ps.setString(2, request.getParameter("place")); 
    ps.executeUpdate(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    ps.close(); 
} 
0

真正的问题是与您的查询。最好使用PreparedStatement来执行查询。 你的代码应该是:

String sqlSt="INSERT INTO users(id,name,place) values (?,?,?)"; 
PreparedStatement pstmt = null; 
try{ 
pstmt = dbConnection.prepareStatement(sqlSt); 
pstmt.setString(1,null); 
pstmt.setString(2,request.getParameter("name")); 
pstmt.setString(3,request.getParameter("place")); 
pstmt.executeUpdate(); 
}catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    pstmt.close(); 
} 

如果你不想使用PreparedStatement,只是从查询中删除最后;。 所以您的查询将是:

String sqlSt="INSERT INTO users(id,name,place) values ("+null+",'"+request.getParameter("name")+"','"+request.getParameter("place")+"')";