2017-05-18 63 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")+"')";