【问题标题】:SQL injection setStringSQL 注入 setString
【发布时间】:2019-01-26 03:13:42
【问题描述】:

是否有可能在以下语句中注入一些代码(我尝试了 sleep 函数并且它有效,但我正在寻找一种方法来获取表的名称):

PreparedStatement statement = connection.prepareStatement(
      "select password from " + USERS_TABLE_NAME + " where userid = ? and password = ?");
statement.setString(1, username_login);
statement.setString(2, password_login);

【问题讨论】:

标签: java mysql sql sql-injection


【解决方案1】:

使用准备好的语句使代码免受 SQL 注入;将一些代码注入该查询的唯一方法是以某种方式篡改USERS_TABLE_NAME。由于您没有提供与此相关的任何代码,因此我无法透露太多信息,但如果它只是一个字符串常量,您应该没问题。

【讨论】:

  • 但它还能注射吗?我读到它可以使用 ORDER BY 子句注入!!
【解决方案2】:

我读到它可以使用 ORDER BY 子句注入!!

您上面展示的示例不容易受到 ORDER BY 子句中的注入。该查询甚至没有 ORDER BY 子句,或任何可以将 ORDER BY 子句附加到查询末尾的字符串连接。

仅当您允许不受信任的内容在将 SQL 查询传递给 prepare() 方法之前对其进行修改时,才会发生 SQL 注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2020-11-19
    • 2019-07-15
    相关资源
    最近更新 更多