Torsten: SQL: Injections verhindern bei Verwendung von Perl und DBI

Beitrag lesen

$statementhandle = $databasehandle->prepare("SELECT spalte1 FROM tabelle WHERE spalte2 = ?");
$returnvalue = $statementhandle->execute( $spalte2Wert );


>   
> Kann ich mit dieser Maßnahme eine über $ENV{'QUERY\_STRING'} ausgelesene Variable unbehandelt in das SQL-Statement einfügen oder sollte ich vorher noch weitere Vorsichtsmaßnahmen beachten?  
  
Fragst Du, ob Du als $spalte2Wert durchaus auch "1;delete from tabelle" übergeben kannst, ohne daß er tabelle löscht?  
  
Darauf kann man mit ja antworten. Wenn nicht ist es ein Bug in dem verwendeten DBD Modul.  
  
Wenn Du allerdings fragst, ob $statementhandle->execute( 2 ) erfolgreich ausgeführt werden kann, so lautet die Antwort: it depends.  
  
Ob Du nach 2 in spalte2 fragen kannst, oder nach "2" fragen mußt, hängt von der Tabellendefinition ab. Manche DBD Module wandeln die Zahl 2 auch automatisch in den String "2" um, wenn die Datenbank das so will, oder auch umgekehrt. Das tun aber nicht alle.