steckl: Zugriff auf mySql-DB: quotemeta() ausreichend?

Beitrag lesen

Hi,

Das ist ganz schlimm böse. Nicht nur, dass du Daten von außen ungeprüft im Script weiter verwendest, nein, du baust sie auch noch unbehandelt in ein SQL-Statement ein.

Das hab ich auch gemerkt. Asche über mein Haupt.

So war es aber immernoch nicht sicher, da der User bei login ja beispielsweise "' or '1=1" schreiben haette koennen und das Script dann trotzdem korrekt ausgefuehrt worden waere. Noch schlimmer waere es natuerlich, wenn er dort die Datenbank mit update oder insert direkt manipuliert, was bisher wohl auch moeglich gewesen waere.

Ja, dein Code ist hochgradig anfällig für derartige Injections.

Wenn ich $login = quotemeta($login) einbaue immernoch?
Falls ja könntest du ein Beispiel nennen, welche Eingabe dann noch zu Fehlern führen würde?

Du kannst dich bei MySQL auf die interne quote-Methode verlassen. Am elegantesten geht das m.E. über Platzhalter:

my $query = 'SELECT usr_pwd FROM USERtab WHERE usr_login=? AND usr_del=?';

my $sth = $dbh->prepare($query)|| die "Preparing statement $stm failed: $DBI::errstr";
$sth->execute($login, $status) || die "Executing statement failed: $stm: $DBI::errstr";

Das hat ja Struppi auch vorgeschlagen und scheint sinnvoll zu sein.  
  
  

> > my $pwFromInput = param('password');  
>   
> Siehe oben.  

Das versteh ich nicht. Welche Eingabe würde hier zu einem Falschen Verhalten des Programms führen.  
  
mfG,  
steckl