0

我有一个jsp代码,它有一个类似的查询

'select * from MyTable where

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

从一个执行

java.sql.语句。现在,只要我们可以使用

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

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

由于原始选择查询是通过 java.sql.Statement 执行的,

我们怎么能做这样的sql注入?如果问题不清楚,请

评论,我会尽力提供进一步的解释。

4

3 回答 3

2

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

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

于 2012-08-17T07:20:53.107 回答
1

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

尽管 Prepared Statements 有助于防御 SQL 注入,但通过不恰当地使用 Prepared Statements 可能会引发 SQL 注入攻击。下面的示例解释了这种情况,其中输入变量直接传递到 Prepared Statement 中,从而为 SQL 注入攻击铺平了道路。

于 2012-08-17T06:59:20.597 回答
0

查看这篇文章,它解释了Statementand PreparedStatement,以及executeQuery()executeUpdate()在 SQL 注入方面的行为。

除了经典的DROP表格,还有更多的场景需要注意,比如:

  • 调用 sleep 函数,使您的所有数据库连接都处于忙碌状态,从而使您的应用程序不可用
  • 从数据库中提取敏感数据
  • 绕过用户认证

不仅仅是 SQL 会受到影响。如果您不使用绑定参数,甚至 JPQL 也会受到影响。

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

于 2016-11-08T15:05:46.330 回答