![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
uogólniając problem, chodzi mi o to, aby dane pochodzące od usera opatrzyć znakami ucieczki, nic prostszego. Używając mysql uzylbym w takim wypadku mysql_escape_string, mysqli - mysqli::escape_string. Ostatecznie chyba działałoby, gdybym używał addslashes() i stripslashes() ale to jak cofanie się do epoki kamienia łupanego...
W projekcie uzywam do komunikacji z bazą Zend_Db_Table, jako adaptera bd uzywam PDO_MYSQL. Do logowania stosuję zend_auth. Dla przykladu opisze nastepujaca sytuacje. W moim projekcie loginem jest email. Logowanie w "normalnym" przypadku(bez znaku "\" ) dziala ok. Jednak u mnie logowanie jest rowniez rejestracją, tzn jesli uzytkownik nie ma konta, wystarczy ze poda email i haslo z listy hasel rozeslanych wczesniej w zaproszeniach, wtedy skypt dodaje go do bazy i od razu loguje. I teraz gwóźdź programu - gdy nowy uzytkownik loguje się z adresem email zawierajacym "\" (wiem, ze email nie powinien zawierac takich znakow ale celowo nie odfiltrowalem tego aby latwiej bylo wychwycic problem) zostaje zarejestrowany i zalogowany poprawnie. Jednak po wylogowaniu proba zalogowania na identyczne dane skutkuje komunikatem o niepoprawnych danych, a w tle dodaniem nowego uzytkownika(czyli skrypt nie wykryl osoby o takim mailu w bazie) o takich samych danych!(widać to jak na dłoni w phpmyadminie). Czyli potrzeba mi innymi slowy takiej samej metody opatrzania znakami ucieczki danych, jakiej uzywa zend_auth. Pewnie jest to banalne, a ja cos przeoczylem, ale prosze o pomoc. Aha, dodam jeszcze tylko, ze nie uzywam Zend_Form, tylko wlasnych formularzy. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A jak tam magic_quotes_gpc? ZF robi to dobrze więc ewidentnie twoja wina.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
magic quotes wylaczone.
wywalilem sprawdzanie formatu maila, po wpisaniu jako login pojedynczych znakow "\", "'" czy """ wywala mi bląd(tu w przypadku "\"):
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż kod związany z bazą.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Kontroler rozszerzający Zend_Controller_Action, po którym dziedziczą wszystkie pozostałe kontrolery ?> [/list] [PHP] { protected $_name = 'users'; } ?> [/list] [PHP] able { protected $_name = 'users'; } ?> [/list] [PHP] ::getDefaultAdapter()); $authAdapter->setTableName('users') ->setIdentityColumn('login') ->setCredentialColumn('haslo') ->setCredentialTreatment('md5(?)'); return $authAdapter; } ?> [/list] $authAdapter->setTableName('users') ->setIdentityColumn('login') ->setCredentialColumn('haslo') ->setCredentialTreatment('md5(?)'); return $authAdapter; } ?> [/list] |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
W dokumentacji dbtable 15.5.8.1 masz wielką tabelę z warningiem. Na początek przepisz ten kod na nową składnię (czyli where('login = ?', 'costam')).
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie viking! Dokładnie o to chodziło...
błąd pojawiał się nie przy dodawaniu danych do bazy a pobieraniu. Wystarczylo zamiast: Kod $wiersz = $baza->fetchRow('login=\''.$login.'\''); Wstawić: Kod $where = $baza->getAdapter()->quoteInto('login = ?', $login);
$wiersz = $baza->fetchRow($where); |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:04 |