Przemysław Paszczak

Przemysław Paszczak Sprawdź kompetencje
zawodowe na zywo
zanim stwierdzisz
ze...

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?

Mam sobie zapytanie



MySqlCommand zapytanie1 = polaczenieMySQL.CreateCommand();
zapytanie1.CommandText = "SELECT DISTINCT Pesel=80060255448 FROM clients WHERE ID_Client";



Zamiast numeru Pesel = 80060255448 chciałbym w miejsce cyfr wstawić zmienną Form1.Pesel;
Jak się do tego odwołać ?

konto usunięte

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?


zapytanie1.CommandText = String.Format("SELECT DISTINCT Pesel={0} FROM clients WHERE ID_Client", Form1.Pesel);


Jeśli będzie więcej parametrów do wstawienia do się daje odpowiedno: {1}, {2}... co odpowiada kolejnemu przekazywanemu parametrowi.Ten post został edytowany przez Autora dnia 28.07.14 o godzinie 07:31

konto usunięte

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?

Dariusz R.:

zapytanie1.CommandText = String.Format("SELECT DISTINCT Pesel={0} FROM clients WHERE ID_Client", Form1.Pesel);


Jeśli będzie więcej parametrów do wstawienia do się daje odpowiedno: {1}, {2}... co odpowiada kolejnemu przekazywanemu parametrowi.


sql injection się kłania :)

To powinno być robione na tej zasadzie:
try AddWithValue

command.Parameters.AddWithValue("@mcUserName", mcUserNameNew);
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew);
command.Parameters.AddWithValue("@twUserName", twUserNameNew);
command.Parameters.AddWithValue("@twUserPass", twUserPassNew);
and don't wrap the value with single quote.

string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)";

konto usunięte

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?

Jakub W.:
sql injection się kłania :)

Próbowałem właśnie wykonać w MySQL takie oto zapytanie:


SELECT * FROM testtable WHERE username = 'testuser'; SELECT * FROM testtable;


Czyli w jednym wierszu. Utworzyłem wcześniej tabelę zawierającą:

ID - integer
username - varchar
password - varchar

i wstawiłem tam kilka rekortów z danymi dla username i password.
Wykonało się tylko pierwsze zapytanie. Oczywiście test na localhoście pod Windows, za pomocą klienta MySQL. Dlaczego nie wykonały się te dwa zapytania za jednym razem? Powinno wyświetlić po drugim zapytaniu wszystkie rekordy.

Jakby zadać:


SELECT * FROM testtable WHERE username = 'testuser' or 1 = 1


wyświetli się wszystko więc to właśnie to o czym mowa (taki test SQL injection). Dlaczego jednak wcześniej wykonało się tylko pierwsze zapytanie a drugie po tym średniku nie? Czyżby to było jakieś zabezpieczenie przed SQL injection?Ten post został edytowany przez Autora dnia 28.07.14 o godzinie 09:43

konto usunięte

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?

Dariusz R.:
Jakub W.:
sql injection się kłania :)

Próbowałem właśnie wykonać w MySQL takie oto zapytanie:


SELECT * FROM testtable WHERE username = 'testuser'; SELECT * FROM testtable;


Czyli w jednym wierszu.

Ilość wierszy nie ma znaczenia. Tutaj mamy dwa oddzielne zapytania.
Utworzyłem wcześniej tabelę zawierającą:

ID - integer
username - varchar
password - varchar

i wstawiłem tam kilka rekortów z danymi dla username i password.
Wykonało się tylko pierwsze zapytanie. Oczywiście test na localhoście pod Windows, za pomocą klienta MySQL.

Ale jakiego klienta ? :) Chodzi o ADO.NET dla mysql ?
Dlaczego nie wykonały się te dwa zapytania za jednym razem? Powinno wyświetlić po drugim zapytaniu wszystkie rekordy.

Jakby zadać:


SELECT * FROM testtable WHERE username = 'testuser' or 1 = 1


wyświetli się wszystko więc to właśnie to o czym mowa (taki test SQL injection). Dlaczego jednak wcześniej wykonało się tylko pierwsze zapytanie a drugie po tym średniku nie? Czyżby to było jakieś zabezpieczenie przed SQL injection ?

Nie sądzę. To zależy od klienta.

PS. czy ktoś wcześniej zauważy że pierwotne zapytanie jest bez sensu ? :)

konto usunięte

Temat: Jak W C# podstawić zmienną do zapytania MySQL ?

Chodzi mi o próbę podpięcia pod username jakiegoś dodatkowego zapytania lub np. DROP TABLE i ewntualnego zabezpieczenia przed czymś takim. Używałem MySQL Query Browser:

http://downloads.mysql.com/archives/query/

Wykonało się tylko to pierwsze zapytanie. Poza tym to raczej nie problem napisać specjalną klasę sprawdzającą zapytania w celu uniknięcia ataków SQL Injection.



Wyślij zaproszenie do