Php SQL注入保护操作

Php SQL注入保护操作,php,sql,mysqli,Php,Sql,Mysqli,我正在使用PHP通过mysqli连接到我的数据库。查询是用Java代码进行的,并用JSON发送到我的PHP脚本 我有一个查询是动态的,在我的代码中生成,所以我不能使用prepared语句 例如,我有一次:从y中选择x,其中z=?和o=?。在其他时间:从y中选择x,其中z=?和o=?和k=?和j=? 这是由用户选择的,我不知道会是什么查询 我的问题是我暴露于SQL注入 我考虑了一个步骤来保护我的数据库不受SQL注入的影响,如果这是一个好主意或者有更好的主意,我想听听你的意见。我考虑将密钥发送到我的

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

我有一个查询是动态的,在我的代码中生成,所以我不能使用prepared语句

例如,我有一次:
从y中选择x,其中z=?和o=?
。在其他时间:
从y中选择x,其中z=?和o=?和k=?和j=?

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

我的问题是我暴露于SQL注入

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

例如:

if($key == "2fdgfg1sdjsdgj2JDSJDFSG2394KSDJG")
{
 // do SQL
}
这就是我在代码中使用的内容。用户可以从my DB中选择想要查看的车型

在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 ? , ?";
int length=usersChecked.length;
字符串sqlQuery=“”;
for(int i=0;i
查询是用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
查询是用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

用户如何进行查询以及如何选择选项?为什么您认为Java不能直接连接到数据库?我认为应该有人给你颁发“PHP无用使用”奖。顺便说一句,你的“保护”毫无意义。这样一个键应该如何使用?用户如何进行查询以及如何选择选项?为什么您认为Java不能直接连接到数据库?我认为应该有人给你颁发“PHP无用使用”奖。顺便说一句,你的“保护”毫无意义。这样一个键到底应该如何使用?从哪里获得$\u GET['o']GET From?从javascript获得。您必须将这个查询构建代码从JS移动到PHPBE,但我认为黑客仍然可以向您注入代码。如果他们将JSON o值设置为“DROP table…”,他们仍然可以注入。或者我错了?这就是参数(?标记)的用途。他们唯一的目的就是让这个
“DROP table…”“
像鸡一样无害,因为只要你有PHP中的
或user=
代码,任何人都不能修改它。虽然这部分代码是用JS编写的,但它显然可以被注入到.From是哪里的$\u GET['o']GET From?从您的javascript。您必须将这个查询构建代码从JS移动到PHPBE,但我认为黑客仍然可以向您注入代码。如果他们将JSON o值设置为“DROP table…”,他们仍然可以注入。或者我错了?这就是参数(?标记)的用途。他们唯一的目的就是让这个
“DROP table…”“
像鸡一样无害,因为只要你有PHP中的
或user=
代码,任何人都不能修改它。虽然这部分代码是用JS编写的,但它显然是可以注入的。