PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come utilizzare le whitelist e le dichiarazioni preparate con Postgresql in php?

Inserimento nella lista bianca

Il tuo codice nella sua forma attuale è molto pericoloso, non solo consenti all'utente di decidere quali campi devono essere selezionati, ma gli consenti anche di decidere su quali tabelle interrogare. Dovresti assolutamente eseguire il controllo della lista bianca su questi. es:

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

Allo stesso modo dovresti convalidare gli elenchi di campi. Ma la convalida dell'elenco dei campi sarà piuttosto complicata perché i tuoi campi dipenderanno dalla tabella. Suggerisco di creare array e controllare che la selezione sia presente.

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

Dichiarazioni preparate

Come sapete, le istruzioni preparate possono essere utilizzate solo per associare parametri. Non possono essere utilizzati per inserire nomi di tabelle e nomi di colonne. Ecco perché hai bisogno sia di dichiarazioni preparate che di una lista bianca. Consiglio di utilizzare DOP . Potrebbe assomigliare a

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