ホームページ > バックエンド開発 > PHPチュートリアル > PHP PDO プリペアドステートメントは動的テーブル名と列名をパラメータとして処理できますか?

PHP PDO プリペアドステートメントは動的テーブル名と列名をパラメータとして処理できますか?

Susan Sarandon
リリース: 2024-12-29 06:24:30
オリジナル
550 人が閲覧しました

Can PHP PDO Prepared Statements Handle Dynamic Table and Column Names as Parameters?

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

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