PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser les listes blanches et les instructions préparées avec Postgresql en php ?

Liste blanche

Votre code dans sa forme actuelle est très dangereux, non seulement vous permettez à l'utilisateur de décider quels champs doivent être sélectionnés, mais vous lui permettez également de décider sur quelles tables interroger. Vous devez absolument effectuer une vérification de la liste blanche sur ceux-ci. ex :

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

De même, vous devez valider les listes de champs. Mais la validation de la liste des champs va être assez compliquée car vos champs vont dépendre de la table. Je suggère de créer des tableaux et de vérifier que la sélection s'y trouve.

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

Relevés préparés

Comme vous le savez, les instructions préparées ne peuvent être utilisées que pour lier des paramètres. Ils ne peuvent pas être utilisés pour remplir les noms de table et les noms de colonne. C'est pourquoi vous avez besoin à la fois de déclarations préparées et d'une liste blanche. Je recommande d'utiliser PDO . Cela pourrait ressembler à quelque chose comme

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