PHP PDO ステートメントのパラメーター制限: テーブル名と列名
PHP データ オブジェクト (PDO) のプリペアド ステートメントは、SQL インジェクションを防止することでセキュリティを強化します攻撃します。ただし、テーブル名または列名をパラメータとしてプリペアド ステートメントに動的に渡すことはできません。
制限が存在する理由
PDO のプリペアド ステートメントは、すべてのユーザーが入力は SQL クエリとして実行される前に検証されます。テーブル名または列名をパラメータとして許可すると、悪意のあるユーザーがクエリを操作し、機密データに不正にアクセスできる可能性があるため、セキュリティの抜け穴が作成されます。
代替ソリューション
SQL クエリにテーブル名を安全に挿入するには、データを手動でフィルタリングしてサニタイズする必要があります。 1 つの方法は、switch() ステートメントを使用して、許可されるテーブル名のホワイトリストを作成することです。
function buildQuery($get_var) { switch ($get_var) { case 1: $tbl = 'users'; break; default: throw new Exception('Invalid table name'); } $sql = "SELECT * FROM $tbl"; }
この方法を使用すると、期待値に一致するユーザー入力のみがテーブルで使用できるようにすることができます。クエリ。このアプローチは、準備されたステートメントの利点を維持しながら、潜在的なセキュリティ脆弱性を防止します。
以上がPHP PDO プリペアドステートメントは動的テーブル名と列名をパラメータとして処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。