2012-08-17 74 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用于此目的:

相关问题