|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cheater_
Orajt:)
Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Czw 23:21, 28 Lut 2008 Temat postu: |
|
|
2. Usuń ten średnik, ma szanse pomóc.
|
|
Powrót do góry |
|
|
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
|
Wysł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 poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Przemek
[świeżak]
Dołączył: 14 Paź 2006
Posty: 21
Przeczytał: 0 tematów
|
Wysł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 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
|
Wysł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 poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
jagm
zielony żul
Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów
|
Wysł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 poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
cheater_
Orajt:)
Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów
|
Wysł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 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
|
Wysł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 poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
jagm
zielony żul
Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Nie 15:05, 02 Mar 2008 Temat postu: |
|
|
Paweł, dlaczego uważasz, że addslashes nie wystarcza?
|
|
Powrót do góry |
|
|
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
|
Wysł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 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
|
Wysł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 |
|
|
|
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
|