Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Logowanie username or email
MESSIAH :)
post
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Jak poprawnie wywołać kod do logowania przy użyciu nazwy użytkownika lub emaila?
  1. if ($stmt = $mysqli->prepare("SELECT id, username, password, salt
  2. FROM members
  3. WHERE email = ? LIMIT 1")) {

zmieniam na
  1. if ($stmt = $mysqli->prepare("SELECT id, username, password, salt
  2. FROM members
  3. WHERE email = ? OR username = ? LIMIT 1")) {


Lecz wciąż nie działa przy użyciu username i nie można zalogować po nazwie użytkownika.


--------------------
Go to the top of the page
+Quote Post
rad11
post
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Moze wina jest to ze robisz tak:

  1. if($stmt = $mysqli->prepare("SELECT id, username, password, salt
  2. FROM members
  3. WHERE email = ? LIMIT 1")){
  4. }


Zrob tak:

  1. $stmt = $mysqli->prepare("SELECT id, username, password, salt
  2. FROM members
  3. WHERE email = ? LIMIT 1");
  4.  
  5. $query = $stmp->execute();
  6.  
  7. if($query > 0){
  8. echo 'Istnieje wiec logujemy';
  9. }


Ten post edytował rad11 11.01.2015, 21:10:31
Go to the top of the page
+Quote Post
MESSIAH :)
post
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Jeśli zmienię email na username tutaj:
  1. FROM members
  2. WHERE email = ? LIMIT 1")){
  3. }

Wtedy będę mógł się zalogować po nazwie użytkownika więc tutaj muszę dodać jakis parametr który będzie wybierał pomiędzy username lub mail.


--------------------
Go to the top of the page
+Quote Post
rad11
post
Post #4





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


to takie zapytanie zrob ja napisalem przykladowo to zapytanie chodzilo mi o to ze execute nie robisz pierw.
Go to the top of the page
+Quote Post
MESSIAH :)
post
Post #5





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Nie rozumiemy się chyba. Ja chce przerobić zapytanie do bazy danych tak aby użytkownik podczas logowania mógł podać username lub email aby sie zalogować.


--------------------
Go to the top of the page
+Quote Post
sazian
post
Post #6





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


  1. $stmt = $mysqli->prepare("SELECT id, username, password, salt
  2. FROM members
  3. WHERE email = ? OR username = ? LIMIT 1")
  4. $stmt->bind_param('ss', $login_lub_email, $login_lub_email);
Go to the top of the page
+Quote Post
zidek
post
Post #7





Grupa: Nieautoryzowani
Postów: 50
Pomógł: 2
Dołączył: 28.05.2013

Ostrzeżenie: (0%)
-----


Pobieranie hasła z bazy jest raczej niepotrzebne, przecież tego hasła i tak nie będziesz do niczego potrzebował.
Przed wykonaniem zapytania powinieneś na poziomie PHP dokonać walidacji maila. Jeśli ma prawidłową formę wysyłasz zapytanie z warunkiem "WHERE email = '{$login}'", a jeśli nie "WHERE username = '{$login}'"
Go to the top of the page
+Quote Post
com
post
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Cytat
Pobieranie hasła z bazy jest raczej niepotrzebne, przecież tego hasła i tak nie będziesz do niczego potrzebował.

Przy logowaniu? raczej powinien je sprawdzić czy sie zgadza z tym co podał ? wink.gif
Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Tak, ale można to sprawdzić w zapytaniu smile.gif
Go to the top of the page
+Quote Post
sowiq
post
Post #10





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 12.01.2015, 11:09:19 ) *
Tak, ale można to sprawdzić w zapytaniu smile.gif

Oho, ktoś tu nie soli haseł wink.gif
Go to the top of the page
+Quote Post
phpion
post
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Pyton_000: Ale w takim przypadku zamykasz sobie drogę na informację zwrotną dlaczego użytkownik się nie zalogował. Bo wpisał niepoprawne hasło? Bo jego konto jest nieaktywne? Bo ma jakąś inną flagę ustawioną? Ja też wyciągam dane na podstawie loginu, a potem w PHP porównuję pozostałe parametry.

@MESSIAH: Co do pytania to proponuję dynamicznie podmieniać kolumnę na podstawie tego, co przesłał użytkownik. Jeśli jest to prawidłowy adres e-mail (można skorzystać z filter_var z flagą FILTER_VALIDATE_EMAIL) - użyj kolumny email, jeśli nie - username. Nie bawiłbym się w żadne ORy bo to skutecznie uniemożliwi użycie indeksu. W zaproponowanym przeze mnie rozwiązaniu jest 1 minus - przypadek, gdy nazwa użytkownika jest adresem e-mail, a podany adres e-mail jest inny smile.gif no ale to raczej mało realny przypadek.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Dlaczego? Generuję sobie hash z hasła i sprawdzam czy taki hash istnieje w BD łącznie z adresem email lub userem
czyli

Kod
WHERE pass = 'hash' AND (email = 'email' OR username = 'username);

Nie widzę w tym niczego strasznego.

[Edited] @up tak to prawda, ale nie zawsze potrzebuję takiej informacji. To już zależy od kontekstu gdzie i dlaczego tego używam.
Napisałem tylko że tak tez można smile.gif

Ten post edytował Pyton_000 12.01.2015, 10:21:49
Go to the top of the page
+Quote Post
phpion
post
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Pyton_000 @ 12.01.2015, 10:20:50 ) *
Nie widzę w tym niczego strasznego.

...poza sekwencyjnym skanowaniem tabeli smile.gif
Go to the top of the page
+Quote Post
sowiq
post
Post #14





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 12.01.2015, 11:20:50 ) *
Nie widzę w tym niczego strasznego.


A ja widzę. W ten sposób nie posolisz hasła.

PS. Mam nadzieję, że Twój 'hash' to nie sha1, albo co gorsza - md5.
Go to the top of the page
+Quote Post
phpion
post
Post #15





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@sowiq:
Chyba, że sól jest wspólna dla wszystkich użytkowników wink.gif
Go to the top of the page
+Quote Post
sowiq
post
Post #16





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wspólna sól = brak soli.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #17





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@sowiq tak czysto informacyjnie używam Crypt z możliwie najmocniejszym algorytmem dost. na serwerze toteż uważam solenie za zbędne (ew. sól ogólna jak phpion powiedział) i tak, nie jest to ani sha1 ani md5 wink.gif
Go to the top of the page
+Quote Post
sowiq
post
Post #18





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Bardzo dobrze, że używasz crypt.

Jeśli chodzi o sól, to trzeba sobie zadać pytanie po co w ogóle jest ona stosowana. Jedną z pierwszych odpowiedzi (przynajmniej moich) jest: żeby dwa takie same hasła miały w bazie różne hashe. Zarówno w przypadku braku soli jak i w przypadku soli wspólnej dla całej bazy, takie same hasła będą miały takie same hashe. W związku z tym, z całą odpowiedzialnością podtrzymuję co napisałem wcześniej: wspólna sól = brak soli.

Ten post edytował sowiq 12.01.2015, 10:55:23
Go to the top of the page
+Quote Post
Pyton_000
post
Post #19





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Ten argument do mnie trafia bo jest racjonalny i poprawny politycznie smile.gif
Go to the top of the page
+Quote Post
com
post
Post #20





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Pyton_000 zgadzam się można, ale ten oto programista robił to sposobem opisanym przez phpion, a ja odnosiłem się do tego przypadku, bo uwzględniając podane przez innych argumenty, też wydaje mi się on bardziej sensowny, bo skoro już generujemy funkcje skrótu, to ma być jakieś utrudnienie/zabezpieczenie a jak ma być to zwykły hash , to mając takie możliwości jak mamy teraz, jest on zbliżony w dużej mierze do efektu jakby to było zapisane plaintextem(no może trochę przesadziłem, bo trzeba mieć troche wiedzy), bo wygenerowanie kolizji w takim wypadku jest na pewno prawdopodobne. A sposób zidek nie podawał informacji takiej jak zapropoowałeś co wprowadzało użytkownika w błąd, stąd tez moja uwaga.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 19.08.2025 - 05:26