sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat whitelisty a připravené příkazy s Postgresql v php?

Bílá nabídka

Váš kód ve své současné podobě je velmi nebezpečný, nejenže uživateli umožňujete rozhodnout, jaká pole by měla být vybrána, ale také mu umožňujete rozhodnout, na jaké tabulky se bude dotazovat. Určitě byste měli provést kontrolu bílé listiny. např.:

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

Podobně byste měli ověřit seznamy polí. Ověření seznamu polí však bude poněkud komplikované, protože vaše pole budou záviset na tabulce. Navrhuji vytvořit pole a zkontrolovat, zda je v nich výběr.

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

Připravené výpisy

Jak víte, připravené příkazy lze použít pouze k navázání parametrů. Nelze je použít k vyplnění názvů tabulek a názvů sloupců. Proto potřebujete jak připravené výpisy, tak white listing. Doporučuji používat CHOP . Může to vypadat nějak takto

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



  1. Chyba migrace Django:Sloupec neexistuje

  2. Přidejte nový zdroj dat (mysql) wildfly

  3. Vícenásobné počty a skupina podle

  4. MySQL hlásí chybu čtení ECONNRESET po době nečinnosti na serveru node.js