sql >> データベース >  >> RDS >> PostgreSQL

PHPのPostgresqlでホワイトリストとプリペアドステートメントを使用するにはどうすればよいですか?

    ホワイトリスト

    現在の形式のコードは非常に危険です。ユーザーが選択するフィールドを決定できるだけでなく、クエリを実行するテーブルをユーザーが決定できるようにします。これらについては、必ずホワイトリストチェックを実行する必要があります。例:

    if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
        $table = $_POST['tableSelected']
    }
    

    同様に、フィールドリストを検証する必要があります。ただし、フィールドはテーブルに依存するため、フィールドリストの検証はかなり複雑になります。配列を作成し、選択範囲がその中にあることを確認することをお勧めします。

    $table1_fields = array('col1','col2',...)
    $table2_fields = array('col1','col2',...)
    

    プリペアドステートメント

    ご存知のように、プリペアドステートメントはパラメータのバインドにのみ使用できます。テーブル名と列名の入力には使用できません。そのため、準備されたステートメントとホワイトリストの両方が必要です。 PDO の使用をお勧めします 。次のようになります

    $stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
    $stmt->execute(array('somevalue'));
    



    1. Djangoクエリ自然順

    2. .csv ファイルを Microsoft SQL Server 2008 R2 にインポートするための推奨される方法は?

    3. MountainLionにpggemをインストールできません

    4. 一般的なテーブル式:それらをいつどのように使用するか