我有一个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注入?如果问题不明确,那么
评论,我会尝试提供进一步的解释。
答案 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,其中说明了Statement
和PreparedStatement
以及executeQuery()
和executeUpdate()
在SQL注入时的行为方式。< / p>
除了经典的DROP
表之外,还有更多需要注意的方案,例如:
不仅仅是SQL可以受到影响。如果你没有使用绑定参数,甚至可以破坏JPQL。
最重要的是,在构建SQL语句时,不应该使用字符串连接。为此目的使用专用API: