Java注入指南(或任何其他语言)

时间:2012-08-17 06:49:11

标签: java sql prepared-statement sql-injection

我有一个jsp代码,它有一个像

这样的查询
'select * from MyTable where

Column1='+request.getParameter('q'),

执行

java.sql.Statement中。现在,只要我们可以使用

附加查询

请求参数,我的目标是将查询更改为:

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

因为原始的select查询是通过java.sql.Statement,

执行的

我们怎样才能做这样的sql注入?如果问题不明确,那么

评论,我会尝试提供进一步的解释。

3 个答案:

答案 0 :(得分:2)

SQL注入指南:Link1& Link2,但Stackoverflow中有很多关于SQL注入的相关线程,如Q & A

做一件事,搜索 - > sql注入java stackoverflow

答案 1 :(得分:1)

如果我们将q作为anything' OR 'x'='x注入,那么它将选择所有可能易受攻击的列。 因为作为参数传递给预准备语句的变量将由JDBC驱动程序自动转义

虽然Prepared Statements有助于防御SQL注入,但是通过不当使用Prepared Statements可能会导致SQL注入攻击。下面的示例解释了这样一种情况,即输入变量直接传递到Prepared Statement中,从而为SQL Injection攻击铺平道路。

答案 2 :(得分:0)

查看this article,其中说明了StatementPreparedStatement以及executeQuery()executeUpdate()在SQL注入时的行为方式。< / p>

除了经典的DROP表之外,还有更多需要注意的方案,例如:

不仅仅是SQL可以受到影响。如果你没有使用绑定参数,甚至可以破坏JPQL。

最重要的是,在构建SQL语句时,不应该使用字符串连接。为此目的使用专用API: