0

PHPを使用してmysqliでデータベースに接続しています。クエリは Java コードで作成され、JSON を使用して PHP スクリプトに送信されます。

コードで作成された動的なクエリが 1 つあるため、準備済みステートメントを使用できません。

たとえば、私は一度に持っています: SELECT x FROM y WHERE z = ? AND o =?. そして他の時には:SELECT x FROM y WHERE z = ? AND o =? and k = ? and j =?

それはユーザーの選択によるものであり、どのクエリになるかわかりません。

私の問題は、SQL インジェクションにさらされていることです。

データベースを SQL インジェクションから保護するための 1 つのステップを考えました。PHP スクリプトに秘密鍵を送信することを考えましたが、鍵が適切な場合にのみ SQL アクションが実行されます。

例えば:

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

これが私のコードで使用するものです。ユーザーは、自分の 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 ? , ?";
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 に答える