0

私は PDO を使用しており、ユーザーが検索結果で選択できるオプションがあります。いくつかの例は、並べ替え、結果の数、ページ番号などです。SQL インジェクション攻撃を防ぐために、準備されたステートメントを使用してこのデータを検証しようとしましたが、変数がクエリに渡されることはありません。

私は何を間違っていますか?検索結果の並べ替えと件数は SELECT メニューで、ページ番号は数字を入力できるテキスト入力フォームです。

$query = "SELECT SQL_CALC_FOUND_ROWS * FROM people ORDER BY id :sortBy LIMIT $start, :total";
$result = $conn->prepare($query);
$result->bindValue(":sortBy", $sortBy, PDO::PARAM_STR);
$result->bindValue(":total", $total, PDO::PARAM_INT);
4

1 に答える 1

2

バインドされたパラメーターは、クエリに渡す実際のデータ用です。実際の制御コマンドをバインドすることはできません。MySQL はそれらをコマンドではなくデータとして解釈します。

並べ替えの代わりにできることは、送信されたものを確認し、「ASC」または「DESC」をクエリに渡すことです。ユーザーが提供した情報をクエリに渡すのではなく、事前定義された一連のコマンドのどれを渡すかを決定するために使用しています。インジェクションのリスクはありません。

于 2012-11-09T16:42:48.943 に答える