![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 004 Pomógł: 9 Dołączył: 18.01.2011 Skąd: Siedlce Ostrzeżenie: (30%) ![]() ![]() |
Witam, mam pewną klasę w niej obiekt pdo (uprzedzając podpowiedzi:)) i pewną funkcję, która odpowiada za sprawdzanie czy w bazie istnieje dany user czy nie jednak coś nie śmiga...
jak to "usprawnić" ? Dzięki z góry! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wybierasz dane które już posiadasz więc bez sensu. Zrób Select count(*) where... limit 1 przy założeniu że email posiada ograniczenie unique.
Czytałeś o prepared statements od ostatniego posta, prawda? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 4 Dołączył: 27.01.2012 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Przede wszystkim PDO jest po to, żeby uniknąć czystych zapytań MySQL, czyli powinno być coś w stylu:
$this->check_data = $this->pdo->select('users') ->fields(array('mail', 'haslo')) ->andWhere('mail = ?', $this->login) ->andWhere('haslo = ?', $this->password); W ten sposób uzyskujesz minimum bezpieczeństwa. W swoim skrypcie masz bardzo poważny problem z SQJ injection. Dodatkowo nie powinieneś mieć $this->login i $this->password tylko przekazać np obiekt usera i mieć $user->login i $user->password . Byłoby super gdyby było to pobierane przez metody np. $user->getLogin(), oraz $user->getPassword(). Przy czym password pamiętaj, że powinno być szyfrowane, czyli po zbindowaniu z formularza logowania ustawiasz najlepiej plainPasswod, które jest później konwertowane. Za dużo w ogole operujesz na properiesach. Nie musisz ustawiac wszystkiego jako nowe pola w klasie. To bez sensu. Metoda ma zwócić tylko informację czy użytkownik może się zalogować czy nie. Przy czym return "wszystko ok"; raczej odpada. Daj return !empty($this->check_data) - zwróci true, albo false. Pomijasz wtedy w ogóle ifa. Dodatkowo z tego co widzę to metoda nazywa się login.. przy czym nie loguje użytkownika tylko sprawdza czy istnieje w bazie danych. Powinna się nazywać zupełnie inaczej np. userExists($login, $password) i być wywoływaną przez login gdzie będzie ustawiana sesja. Trochę chaotycznie, ale zawsze (IMG:style_emoticons/default/smile.gif) Najlepiej wrzuć na githuba (IMG:style_emoticons/default/smile.gif) Zapraszam też do głosowania na agendę http://www.phpcon.pl/2013/pl/agenda (IMG:style_emoticons/default/smile.gif) Piotr Pasich Ten post edytował piotr.pasich 7.08.2013, 20:10:22 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 004 Pomógł: 9 Dołączył: 18.01.2011 Skąd: Siedlce Ostrzeżenie: (30%) ![]() ![]() |
ok, wszystko jasne, dzięki za tak wyczerpującą odpowiedź, mam tylko pytanko, bo tego nie mogę znaleźć - jak przekazać obiekt $user ?
i mam błąd:
Ten post edytował miras 9.08.2013, 11:42:15 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
http://php.net/manual/en/book.pdo.php
Po prostu PDO nie zawiera takich metod o jakich wspomniał kolega powyżej... Jeśli chodzi o zabezpieczenie skryptu, skorzystaj z dobrodziejstw jakie oferuje PDO - bindowanie (bindParam, bindValue) oraz tzw. "prepared statements" o których wspomniał już viking (KLIK). Pamiętaj, manual jest Twoim przyjacielem (IMG:style_emoticons/default/smile.gif) Jeśli chcesz więcej wskazówek, zamieść zawartość całej swojej klasy, w której jest funkcja login. Ten post edytował Tajgeer 9.08.2013, 14:05:33 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:06 |