ホームページ >バックエンド開発 >PHPチュートリアル >プリペアドステートメントのパラメータとしてテーブル名を使用できないのはなぜですか?

プリペアドステートメントのパラメータとしてテーブル名を使用できないのはなぜですか?

DDD
DDDオリジナル
2024-12-27 12:23:10186ブラウズ

Why Can't I Use Table Names as Parameters in Prepared Statements?

準備されたステートメントでテーブル名をパラメーター化できません

SQL インジェクションから保護するために変数を分離しようとした最初の試みにもかかわらず、次のような問題が発生しました。エラー。この問題は、テーブル名をパラメータとして含めようとしたことが原因で発生します。

プリペアド ステートメントでは、パラメータ化は SQL ステートメント内の値に限定されます。ステートメントの有効性を決定するテーブル名と列名は、動的に置換できません。

プリペアド ステートメントをシミュレートする PDO などのインターフェイスでも、テーブル名を引用符内の文字列として置換すると、無効な SQL 構文が発生します。

インジェクションの脆弱性を防ぐには、ホワイトリストに登録された許容可能なテーブル名のセットを維持し、それに対して $mytable を検証することが最善です。 $mytable の有効性を保証する限り、「SELECT * FROM {$mytable}」のようなコードは引き続き実行可能なオプションです。

以上がプリペアドステートメントのパラメータとしてテーブル名を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。