PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verwende ich Whitelists und vorbereitete Anweisungen mit Postgresql in PHP?

Weiße Liste

Ihr Code in seiner aktuellen Form ist sehr gefährlich, Sie erlauben dem Benutzer nicht nur zu entscheiden, welche Felder ausgewählt werden sollen, sondern Sie erlauben ihm auch zu entscheiden, welche Tabellen abgefragt werden sollen. Diese sollten Sie unbedingt einer Whitelist-Prüfung unterziehen. zB:

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

Ebenso sollten Sie die Feldlisten validieren. Die Validierung der Feldliste wird jedoch ziemlich kompliziert sein, da Ihre Felder von der Tabelle abhängig sein werden. Ich schlage vor, Arrays zu erstellen und zu überprüfen, ob die Auswahl darin enthalten ist.

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

Vorbereitete Erklärungen

Wie Sie wissen, können vorbereitete Anweisungen nur zum Binden von Parametern verwendet werden. Sie können nicht zum Ausfüllen von Tabellennamen und Spaltennamen verwendet werden. Aus diesem Grund benötigen Sie sowohl vorbereitete Erklärungen als auch Whitelisting. Ich empfehle die Verwendung von PDO . Es könnte etwa so aussehen

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