Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Problem z php/mysql

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Informatyka
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cheater_
Orajt:)



Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów


PostWysłany: Czw 20:22, 28 Lut 2008    Temat postu: Problem z php/mysql

Mam taki problem:
Kod:
$query = sprintf( 'SELECT COUNT(*) FROM sa_uzytkownicy WHERE login = \'%s\' AND haslo = \'%s\';', $login, $haslo );


Na serwerze A(mysql 5.0.45), wywołanie takiego zapytania działa OK, ale na serwerze B(4.1.7), dostaję "DB Error: unknown error"
Co więcej, jeśli takie samo zapytanie wywołuję na serwerze B nie za pomocą php, tylko bezpośrednio w bazie, za pomogą terminala, to działa dobrze...

pola 'login' i 'haslo' w bazie są typu VARCHAR(20)

co więcej, na serwerze B działa coś takiego:
Kod:
$query = sprintf( 'SELECT COUNT(*) FROM sa_uzytkownicy WHERE login = 1;');

więc wychodzi na to, że wszystko jest ok, dopóki nie porównujemy wartości pól w bazie do stringów.

Jeśli ktoś ma jakiś pomysł o co chodzi, to byłoby zajebiście, bo zaczynam tracić do tego cierpliwość...


Ostatnio zmieniony przez cheater_ dnia Czw 20:26, 28 Lut 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Czw 23:21, 28 Lut 2008    Temat postu:

0. Masz ładne SQL injection :)

1. Sprawdź, czy driver, którego używa PHP jest kompatybilny z tą wersją serwera.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Czw 23:21, 28 Lut 2008    Temat postu:

2. Usuń ten średnik, ma szanse pomóc.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Pią 0:27, 29 Lut 2008    Temat postu:

Ja nie widze sql injection, na defaulotowej konfiguracji php magic quotes jest wlaczone.

W ogole cheater, po co sie mordujesz z sprintfem. W php mozesz normalnie dokonywac konkatenacji stringow za pomoca operatora ".".

//
edit: Byl "+" jako konkatenacja, poprawione :)


Ostatnio zmieniony przez exeman dnia Pią 0:59, 29 Lut 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Przemek
[świeżak]



Dołączył: 14 Paź 2006
Posty: 21
Przeczytał: 0 tematów


PostWysłany: Pią 0:55, 29 Lut 2008    Temat postu:

exeman napisał:
W ogole cheater, po co sie mordujesz z sprintfem. W php mozesz normalnie dokonywac konkatenacji stringow za pomoca operatora +.


W PHP konkatenacja jest za pomocą kropki :-)

Ja proponuję w części po WHERE dać zamast "=" słowo "LIKE". Dodatkowo, tak jak pisali poprzednicy usunąć średnik na końcu zapytania.

Kiedy korzystamy z mysql_query() można wykonać tylko jedno zapytanie, średnik na końcu jest zbędny, teoretycznie powinien zostać zignorowany..

Co zwraca mysql, kiedy zapytanie jest podawane na konsoli, a nie skryptem?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Pią 19:35, 29 Lut 2008    Temat postu:

@exeman - magic_quotes_gpc to jedna z największych pomyłek w PHP, zresztą i tak nie daje gwarancji (poszukaj sobie BIG5 attack). Powinno się robić mysql_real_escape, ale dobra, może to jest zrobione wcześniej.

Ale to off-topic, bo nie powinno mieć wpływu.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
jagm
zielony żul



Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów


PostWysłany: Pią 22:55, 29 Lut 2008    Temat postu:

Pawel Str. napisał:
magic_quotes_gpc to jedna z największych pomyłek w PHP

czemu?

Pawel Str. napisał:
Powinno się robić mysql_real_escape

a to chroni przed union?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cheater_
Orajt:)



Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów


PostWysłany: Sob 1:43, 01 Mar 2008    Temat postu:

dzieki za rady, jak odeśpię, sprawdzę ich działanie (;
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Sob 17:55, 01 Mar 2008    Temat postu:

@jagm - dlatego, że nie wszystkie dane trafiają od razu do bazy danych, często trzeba je np. wyświetlić na stronie. Poza tym jest to paskudne psucie architektury - dane na wejściu są rekodowane do postaci utrudniającej przetwarzanie, ale za to zdatnej dla protokołu wyjściowego - który jednak wcale nie musi być tym właściwym.... Większość porządnych aplikacji PHP4/5 zaczyna od sprawdzenia, czy magic_quotes_gpc jest włączone, i jeżeli tak - robi stripslashes na całym $_REQUEST/$_GET/$_POST, dzięki czemu da się danych jakoś rozsądnie użyć.

Co masz na myśli pisząc o union?


Ostatnio zmieniony przez Pawel Str. dnia Sob 18:01, 01 Mar 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
jagm
zielony żul



Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów


PostWysłany: Sob 19:35, 01 Mar 2008    Temat postu:

np cos takiego jak w pierwszym przykladzie: [link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 2:48, 02 Mar 2008    Temat postu:

Nie. Dlatego powinien byś sprintf %d (a ja zazwyczaj i tak obkładam to wcześniej intvalem). Ale dla zwykłych łańcuchów tekstowych addslashes jest niewystarczjące, a tylko przeszkadza.

Zresztą i tak najfajniej jest kiedy baza obsługuje query parameters.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Nie 15:05, 02 Mar 2008    Temat postu:

Paweł, dlaczego uważasz, że addslashes nie wystarcza?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 15:43, 02 Mar 2008    Temat postu:

Bo ignoruje kodowanie znaków i cechy specyficzne dla bazy. Jeżeli baza używa np kodowania BIG5 (chińskie), to slash jest prawidłowym fragmentem znaku wielobajtowego. Da się skonstruować taką sekwencję, która po potraktowaniu addslashes będzie zawierała "niezaeskejpowany" cudzysłów.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Nie 15:49, 02 Mar 2008    Temat postu:

Wow, sprytne! Ciekawe jak sobie php'owcy radzą z tym problemem w chinach.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 16:59, 02 Mar 2008    Temat postu:

Tak jak pisałem.... mysql_real_escape...
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Informatyka Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin