sql >> Database >  >> RDS >> PostgreSQL

Hoe gebruik je witte lijsten en voorbereide verklaringen met Postgresql in php?

Witte vermelding

Uw code in zijn huidige vorm is erg gevaarlijk, u staat niet alleen de gebruiker toe om te beslissen welke velden moeten worden geselecteerd, maar u staat hem ook toe te beslissen in welke tabellen hij moet zoeken. U moet deze zeker op de witte lijst controleren. bijv.:

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

Op dezelfde manier moet u de veldlijsten valideren. Maar validatie van veldlijsten zal nogal ingewikkeld zijn omdat uw velden afhankelijk zullen zijn van de tabel. Ik raad aan om arrays te maken en te controleren of de selectie erin staat.

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

Voorbereide verklaringen

Zoals u weet, kunnen voorbereide instructies alleen worden gebruikt om parameters te binden. Ze kunnen niet worden gebruikt om tabelnamen en kolomnamen in te vullen. Daarom heb je zowel voorbereide verklaringen als whitelists nodig. Ik raad aan om BOB te gebruiken . Het kan er ongeveer zo uitzien

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



  1. Een MySQL-queryresultaat opslaan in een .CSV-bestand

  2. Left Join presteert beter dan Inner Join?

  3. ASP.NET Web Forms en MySql Entity Framework:geneste transacties worden niet ondersteund

  4. Postgresql:CSV-export met escaped linebreaks