Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Zend Framework] Znaki ucieczki
zordon
post 22.07.2009, 09:12:40
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
viking
post 22.07.2009, 09:29:53
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.


--------------------
Go to the top of the page
+Quote Post
zordon
post 22.07.2009, 09:45:06
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 "\"):
  1. <?php
  2. Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''') LIMIT 1' at line 1' in D:wwwrbanklibraryZendDbStatementPdo.php:238 Stack trace: #0 D:wwwrbanklibraryZendDbStatement.php(283): Zend_Db_Statement_Pdo->_execute(Array) #1 D:wwwrbanklibraryZendDbAdapterAbstract.php(464): Zend_Db_Statement->execute(Array) #2 D:wwwrbanklibraryZendDbAdapterPdoAbstract.php(232): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array) #3 D:wwwrbanklibraryZendDbTableAbstract.php(1393): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select)) #4 D:wwwrbanklibraryZendDbTableAbstract.php(1257): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select)) #5 D:wwwrbankapplicationcontrollersLoginController.php(58): Zend_Db_Table_Abstract->fetchRow('login=''') #6 D:ww in D:wwwrbanklibraryZendDbStatementPdo.php on line 238
  3. ?>
Go to the top of the page
+Quote Post
viking
post 22.07.2009, 10:09:05
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ą.


--------------------
Go to the top of the page
+Quote Post
zordon
post 22.07.2009, 10:31:31
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]

  • [/list]

  • [/list]

  • [/list]

  • [/list]
  • Go to the top of the page
    +Quote Post
    viking
    post 22.07.2009, 11:09:14
    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')).


    --------------------
    Go to the top of the page
    +Quote Post
    zordon
    post 22.07.2009, 11:36:59
    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);
    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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:04