2012-08-17 71 views
0

我有有一個像SQL注入指南在Java(或任何其他語言)

'select * from MyTable where 

Column1='+request.getParameter('q'), 
這是從

java.sql.Statement中執行

查詢中的JSP代碼。現在,只要我們可以通過使用

請求參數追加查詢,我的目標是將查詢更改爲類似:因爲原來的選擇查詢通過java.sql.Statement中執行

Select * from MyTable where Column1 = a; Delete from MyTable; 

我們該如何做這樣的sql注入?如果問題不明確,請親切點

評論,我會盡力提供進一步的解釋。

+1

你有沒有試着用搜索引擎的 'SQL注入'? – tdammers 2012-08-17 06:51:55

+0

[SQL注入](http://xkcd.com/327/) – 2012-08-17 06:53:53

+1

請參閱:http://stackoverflow.com/questions/1582161/how-does-a-preparedstatement-avoid-or-prevent-sql-injection或http://stackoverflow.com/questions/1812891/java-escape-string-to-prevent-sql-injection – MicSim 2012-08-17 06:59:04

回答

1

如果我們將q作爲anything' OR 'x'='x注入,那麼它將選擇所有易受攻擊的列。 ,因爲作爲參數傳遞給準備語句的變量將被JDBC驅動程序自動轉義

雖然Prepared Statements有助於抵禦SQL注入,但通過不恰當地使用Prepared Statements可能會導致SQL注入攻擊。下面的例子解釋了這種情況,輸入變量直接傳遞到Prepared Statement中,從而爲SQL注入攻擊鋪平了道路。

2

SQL注入指南:Link1 & Link2,但在Stackoverflow中有很多關於SQL注入的相關線程,如Q & A

做一兩件事,被搜索 - > SQL注入的java計算器

0

退房this article,這也解釋了StatementPreparedStatement,以及executeQuery()executeUpdate()的行爲如何當談到SQL注入。

除了經典DROP表,還有更多的場景看出來,如:

敏感數據,並且它不只是SQL能夠b影響。如果您不使用綁定參數,即使JPQL也會受到影響。

底線,在構建SQL語句時,不應該使用字符串連接。使用專用API用於此目的:

相關問題