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 サイトの他の関連記事を参照してください。