ホームページ > バックエンド開発 > PHPチュートリアル > PDO プリペアド ステートメントのパラメータで ORDER BY を安全に使用するにはどうすればよいですか?

PDO プリペアド ステートメントのパラメータで ORDER BY を安全に使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-04 18:32:12
オリジナル
499 人が閲覧しました

How Can I Safely Use ORDER BY with Parameters in PDO Prepared Statements?

PDO プリペアド ステートメントでの ORDER BY 句でのパラメータの使用

PDO では、ORDER BY 句でパラメータを直接使用することはできません。これにより、SQL インジェクションの潜在的な脆弱性が発生する可能性があります。

このような状況が発生した場合は、ORDER BY 句を SQL 文字列に直接挿入する必要があります。ただし、SQL インジェクション攻撃を防ぐために注意する必要があります。

例:

$order = 'columnName';
$direction = 'ASC';

$query = "SELECT * FROM table WHERE column = :my_param ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->execute();
ログイン後にコピー

ホワイトリスト ヘルパー関数:

潜在的なリスクを軽減するには、ホワイトリスト ヘルパー関数を使用して、 ORDER BY 句は正当です。以下に例を示します。

function white_list($value, $allowed_values, $error_message) {
  if (!in_array($value, $allowed_values)) {
    throw new Exception($error_message);
  }
  return $value;
}
ログイン後にコピー

ヘルパー関数の使用:

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$query = "SELECT field FROM table WHERE column = ? ORDER BY $order $direction";

$stmt = $db->prepare($query);
$stmt->execute([$is_live]);
ログイン後にコピー

このアプローチにより、許可された値のみが ORDER BY 句に含まれるようになり、悪意のある入力からのアプリケーション。

以上がPDO プリペアド ステートメントのパラメータで ORDER BY を安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート