SQLinjection

Pauline

Grünschnabel
Hallo,

ich verwende eine mySQL-DB in der Version 4.1. Programmieren tue ich mit ASP.net 1.1.
Ich habe folgendes Problem:

Um SQLinjection zu verhindern habe ich folgenden Quelltext gechrieben


connMySQL.Open();

//Anfrage: gibt es einen Eintrag mit diesem Login und Password
string sQuery = "SELECT COUNT (*) FROM login WHERE login= @login AND password= @password;";

MySqlCommand sqlCommand = new MySqlCommand(sQuery, connMySQL);
//UserName und Password sind Textboxen
sqlCommand.Parameters.Add("@login", UserName.Text));
sqlCommand.Parameters.Add("@password", Password.Text);

//iAnzahlDatensätze == 1, korrekter LOGIN
//sonst Fehler
int iAnzahlDatensätze = (int) sqlCommand.ExecuteScalar();

//Datenbankverbindung schliessen
connMySQL.Close();

Leider meldet der Browser einen Fehler im SQL-Syntax. Die Fehlermeldung sagt, dass ein Fehler in der Nähe von "FROM login WHERE login= @login AND password= @password;"
aufgetreten ist. Das scheint, als ob @login und @password nicht ersetzt werden.

Was läuft verkehrt? - Bitte helft mir! - Danke
Pauline
 
Die Syntax die du verwendet hast entspricht der des MS SQL Servers.
Bei MySQL ist es meines Wissens im Moment nicht möglich Parameterisierte Abfragen zu erstellen.
Du kannst nur den kompletten String zusammenbauen, um dort SQL Injection zu verhindern solltest du Anführungszeichen Ausquoten also ' ersetzen durch \' .
 
Danke für deinen Hinweis,
ich werde mal im Handbuch von mySQL nachsehen. Das ausquoten der Anführungszeichen wäre dann zumindest immer noch eine Notlösung.

Pauline
 
Ersetze mal die Zeile
Code:
string sQuery = "SELECT COUNT (*) FROM login WHERE login= @login AND password= @password;";
durch
Code:
string sQuery = "SELECT COUNT (*) FROM login WHERE login=? AND password=?";
 
Zurück