0

我正在使用 PHP 通过 mysqli 连接到我的数据库。查询是用 Java 代码进行的,并使用 JSON 发送到我的 PHP 脚本。

我有一个动态查询,并且在我的代码中进行,所以我不能使用准备好的语句。

例如我有一次:SELECT x FROM y WHERE z = ? AND o =?。在其他时间:SELECT x FROM y WHERE z = ? AND o =? and k = ? and j =?

这是由用户选择的,我不知道查询会是什么。

我的问题是我接触到了 SQL 注入。

我想了一个步骤来保护我的数据库免受 SQL 注入,如果这是一个好主意或者有更好的主意,我想听听你的意见。我考虑过将密钥发送到我的 PHP 脚本,并且只有在密钥好的情况下才会执行 SQL 操作。

例如:

if($key == "2fdgfg1sdjsdgj2JDSJDFSG2394KSDJG")
{
 // do SQL
}

这就是我在我的代码中使用的。用户可以从我的数据库中选择他想查看的汽车类型。

在 Android 应用程序中,他有一个对话框,他可以在其中选择他想要的汽车。然后我在我的java代码中使用这个代码:

                        int length = usersChecked.length;
                        String sqlQuery = "";
                        for (int i = 0; i < length; i++) {
                            if (usersChecked[i]) {
                                if (sqlQuery.equals(""))
                                    sqlQuery = " = " + list[i];
                                else
                                    sqlQuery = sqlQuery + " OR user = "
                                            + list[i];
                            }
                        }

                        favoritesQuery = "SELECT car, year, gas_type FROM cars_names WHERE user "
                                + sqlQuery
                                + " ORDER BY date DESC LIMIT ? , ?";
4

1 回答 1

4

查询是用 java 代码进行的,并使用 JSON 发送到我的 php 脚本。

这就是你做错了。

  • 查询不应由用户选择
  • 查询不应在 java(或者更确切地说是 javascript)代码中进行
  • 不应使用 JSON 发送查询

查询必须在 PHP 脚本中进行硬编码。

至少您可以根据用户的选择动态创建查询:

$sql = "SELECT x FROM y WHERE z = ?";
if (isset($json['o']))
{
    $sql .= " AND o =?";
    $values[] = $json['o']
}
// and so on
于 2013-09-10T09:14:45.500 回答