dedlfix: SQL Injection in PostgreSQL verhindern

Beitrag lesen

Tach!

Wäre dann sowas o.k.?

if (isset($_GET['service']) && $_GET['service'] != "") {

$getservice = pg_escape_string($_GET["service"]);

$sqlString = "SELECT * FROM mytab WHERE service ='".$getservice."'";
$result_service = pg_query($dbconn , $sqlString) or die('Connection failed (pg_query): ' . pg_last_error());
}

  
Aus SQL-Injection-sicherheitstechnischen Gesichtspunkten ist das ok. Mit \_literal() statt \_string() kannst du sogar noch die Anführungszeichen drumherum einsparen.  
  
Das "or die()" ist aber nicht nur aus Sicht der Benutzerfreundlichkeit beanstandenswert. Ein Normal-Anwender kann mit der Fehlermeldung nichts anfangen und andere als der Administrator sollen damit nichts anfangen können. Also ist die Ausgabe in Richtung Client nicht empfehlenswert. Und ein Abbruch statt einem für den Fall angemessenen alternativen Abschluss des Vorgangs kann geschäftsschädigend sein, weil zum Beispiel Kunden dann anderswo kaufen gehen.  
  
Weiterhin lässt sich das isset mit Nicht-leer-Prüfung durch ein empty() ersetzen.  
  
  
dedlfix.