Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] myslq_query - pusty wynik
Hectic
post
Post #1





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Witam,
wykonuje w phpmyadmin takie zapytanie

  1. SELECT id FROM uzytkownicy WHERE email = 'mail@wp.pl' AND login = 'nick' AND 1=2 UNION SELECT id FROM uzytkownicy WHERE id=1 #' LIMIT 1


Zwraca wynik 1.

Za to kod w php zwraca pustą tablicę

  1. <?php
  2. $q = "SELECT id FROM uzytkownicy WHERE email = 'mail@wp.pl' AND login = 'nick' and 1=2 UNION SELECT id FROM uzytkownicy WHERE id=1 #' LIMIT 1";
  3.  
  4. $query = mysql_query($q);
  5. $array = mysql_fetch_array($query);
  6.  
  7. echo 'id:'.$array[id];
  8. ?>


Tablica $array jest pusta, dlaczego?


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post
netmare
post
Post #2





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ja osobiście się nie orientuje, ale sprawdź może jaki będzie rezultat dla

  1. SELECT id FROM uzytkownicy WHERE id=1


Poza tym co to jest [id] w linii 7 questionmark.gif
Myślę że jeśli już to ['id'] winksmiley.jpg

Ten post edytował netmare 6.03.2008, 12:24:19
Go to the top of the page
+Quote Post
Hectic
post
Post #3





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Dla tego zapytani zwraca id = 1 winksmiley.jpg Co do tego drugiego to w chwili obecnej nie ma to różnicy tongue.gif Udało mi się zrobić drugie zapytanie, ale jest to samo w phpmyadminie ok, a w php już dupa sad.gif

  1. SELECT id FROM uzytkownicy WHERE email = 'mail@wp.pl' AND login = 'login' OR 1=1 LIMIT 1 #' LIMIT 1


w phpmyadminie dostaje 1.


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post
netmare
post
Post #4





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


mało się znam na mysql ale co daje '# limit 1 na końcu linii, bo to mi wygląda jakoś podejrzanie, poza tym jak masz pusty wynik to znaczy chyba że wsytąpił błąd zapytania, więc może warto poznać komunikat błędu?
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




wywal te #' LIMIT 1
to jest komentarz ktorego php nie lyka i leci ci blad


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Hectic
post
Post #6





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Problem w tym, że błąd nie wystąpił, a znak # powoduje, że zapytania za znakiem nie będą brane pod uwagę. Doszedłem już w czym jest problem. Zapytanie jest generowane z formularza. Wygląda to tak

  1. <?php
  2. $q = "SELECT id FROM $users_table WHERE email = '$email' AND login = '$login' LIMIT 1";
  3. ?>


Za pomocą POST do zmiennej login wstawiam

  1. test& # 3 9 ; and 1=3 UNION SELECT id FROM uzytkownicy WHERE id=1 #


Czyli zapytanie po wyświetleniu echo wygląda tak

  1. SELECT id FROM uzytkownicy WHERE email = 'email' AND login = 'jakis login' AND 1=3 UNION SELECT id FROM uzytkownicy WHERE id=6 #' LIMIT 1


ale tak naprawdę do serwera mysql jest wysyłane w postaci

  1. SELECT id FROM users WHERE email = 'email' AND login = 'jakis login& # 3 9 ; and 1=3 UNION SELECT id FROM uzytkownicy WHERE id=6


Dlatego zapytanie jest komentowane za pomocą # i nie zwraca błędu. Dla wyjaśnienia użyłem & # 3 9 ; bo jest to odpowiednik ' w unicode, a normalny ' w post jest zamieniany na \'
Czy da się temu jakoś zaradzić czy skrypt jest bezpieczny?

Ten post edytował Hectic 6.03.2008, 13:14:13


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post
netmare
post
Post #7





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


a komu chcesz taką świnię podłożyć i po co??
Go to the top of the page
+Quote Post
Hectic
post
Post #8





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Nikomu nie mam zamiaru nic podkładać... jeśli mam dostęp do kodu to znaczy, że skrypt jest mojego autorstwa? Dwa lata temu napisałem system cms, teraz po zebraniu większego doświadczenia szukam w nim błędów. Znalazłem już jeden tylko przeszkodą jest właśnie to. Wystarczy, że uda mi się wybrać id admina, a hasło zostanie zmienione na nowe i wysłane na podany adres e-mail.


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post
netmare
post
Post #9





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


'=>\' oznacza że na sewrerze jest włączone magic_quotes_gpc, więc raczej nie musisz się obawiać.
Na wszelki wypadek możesz powiedzmy sprawdzać czy jest włączone magic quotes, jeśli nie to zrobić addslashes(), albo jest jeszcze jakaś funkcja do filtrowania SQL-a a najprościej chyba możesz się zabezpieczyć poprzez sprawdzenie czy w mailu wpisanym w formularzu występują spacje, jeśli występują to nie puszczasz dalej skryptu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:53