Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Warunek IF w warunku
pitu
post
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Witam

Mam problem z zagnieżdżeniem warunków. Wydaje mi się, że wszystko jest dobrze lecz nie działa jak trzeba.
  1. <?php
  2.  
  3. $loglogin = $_POST["login"];
  4. $loghaslo = sha1($_POST["haslo"]);
  5.  
  6. $logowanie = mysql_query("SELECT * FROM UZYTKOWNICY WHERE Uzytkownik='" .$loglogin. "' and Haslo='" .$loghaslo. "'");
  7. $loginspr = mysql_query("SELECT * FROM UZYTKOWNICY WHERE Uzytkownik='" .$loglogin. "'");
  8.  
  9.  
  10. if (mysql_num_rows($logowanie) != 1) {
  11.  
  12. if (mysql_num_rows($loginspr) == 1) {
  13. $bladhaslo = 1;
  14.  
  15. } else
  16. {
  17. $bladlogowanie = 1;
  18.  
  19. }
  20.  
  21. } else
  22. {
  23. $logowanieok = 1;
  24. }
  25. ?>


Nie działa mi część z $logowanieok = 1, pomimo niespełnienia warunku pierwszego kod nie jest wykonywany.
Powód edycji: [piotrooo89]: przenoszę do przedszkola + tagi
Go to the top of the page
+Quote Post
vermis
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Nie widzę połączenia z bazą, nie masz czy nie wkleiłeś?
Go to the top of the page
+Quote Post
pitu
post
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Połączenie mam, nie wrzucałem tutaj ponieważ działa na pewno. Inne warunki działają poprawnie.
Go to the top of the page
+Quote Post
NEO.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 5
Dołączył: 26.01.2011

Ostrzeżenie: (40%)
XX---


Straszny ten kod. Raz ze prosisz sie sqlinjection, dwa ze hasla masz plaintextowe, trzy ze jesli to nie Twoj serwer to wystarczy wlaczyc logowanie zapytan i wszystkie hasla sa jak na dloni. A 2 zapytania to juz super pomysl - zeby sie zalogowac user musi podac poprawny login *i* haslo. Po co chcesz mowic dokladnie ze login zly czy haslo zle? nie wyszlo logowanie - "Dane uzyte do logowania nie sa poprawne. Wpisz poprawne dane.". Koniec komunikatu. No chyba ze koniecznie chcesz ulatwic komus odkrycie loginow do istniejacych w systemie kont.

Ten post edytował NEO.pl 25.03.2011, 16:35:47
Go to the top of the page
+Quote Post
pitu
post
Post #5





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


OK, wykonałem jak napisałeś, czyli udane lub nieudane logowanie. Cod o SQLi to mógłbyś podpowiedzieć jak zabezpieczyć taki panel logowania?
Go to the top of the page
+Quote Post
NEO.pl
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 5
Dołączył: 26.01.2011

Ostrzeżenie: (40%)
XX---


SQL Injection:
http://en.wikipedia.org/wiki/SQL_injection
http://pl2.php.net/mysql_real_escape_string
Google

Co do zapytania i hasla -> jesli juz musisz trzymac plain textowo (99,99% nie musisz) to np. wyjmij haslo z bazy dla danego usera i porownaj sobie w kodzie. Poza tym robienie "SELECT *" jest srednio sensowne jesli interesuje Cie jedynie informacja czy dany rekord istnieje czy nie. Albo wyciagaj to co faktycznie potrzebujesz (np. "SELECT `id`, `haslo` ....) albo tylko zliczaj "SELECT COUNT(id) AS count..." (tylko wtedy mysql_num_rows() nie mozesz uzyc tak jak masz wyzej.

Ten post edytował NEO.pl 25.03.2011, 16:49:57
Go to the top of the page
+Quote Post
pitu
post
Post #7





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Dzięki za wskazówki.

Przerobiony kod wygląda następująco:
  1. <?php
  2. require('includes/includes.php');
  3.  
  4. $loglogin = mysql_real_escape_string($_POST["login"]);
  5. $loghaslo = mysql_real_escape_string(sha1($_POST["haslo"]));
  6.  
  7. $logowanie = @mysql_query("SELECT COUNT(Id_uzytkownika) AS ILE FROM UZYTKOWNICY WHERE Uzytkownik='" .$loglogin. "' and Haslo='" .$loghaslo. "'");
  8. $logowaniedane = mysql_fetch_array($logowanie);
  9.  
  10. //sprawdzanie czy pola nie sa puste
  11. if (empty($_POST["login"]) or empty($_POST["haslo"])) {
  12.  
  13. $braklogowanie = "Nie wpisałeś loginu lub hasła";
  14. echo "brak";
  15. exit();
  16. }
  17. //sprawdzenie czy dane się zgadzają
  18. if ($logowaniedane["ILE"] != 1) {
  19.  
  20. $bladlogowanie = "Podane dane są nieprawidłowe";
  21. echo "blad";
  22.  
  23. } else
  24. {
  25. $oklogowanie = "ok";
  26. echo "ok";
  27. }
  28.  
  29. ?>


Czy należało by coś jeszcze do niego dodać aby był bezpieczny?

Ten post edytował pitu120 25.03.2011, 17:41:13
Go to the top of the page
+Quote Post
NEO.pl
post
Post #8





Grupa: Zarejestrowani
Postów: 71
Pomógł: 5
Dołączył: 26.01.2011

Ostrzeżenie: (40%)
XX---


Tak. Poprawna obsluge bledow mysql_query zamiast nieszczesnego @ (bo to i tak zle uzyte masz). A, jeszcze najpierw robisz zapytanie a potem sprawdzasz czy masz do niego "komponenty"? herbate tez najpierw nalewasz a potem wyjmujesz szklanke z szafki? (IMG:style_emoticons/default/smile.gif)

Ten post edytował NEO.pl 25.03.2011, 17:53:33
Go to the top of the page
+Quote Post
pitu
post
Post #9





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Dziękuję za podpowiedzi i porady.

OK zmieniłem kolejność
1. sprawdzam pola
2. jeżeli nie są puste wykonuje zapytanie itp.

Czy coś jeszcze można zmienić, dodać?
  1. <?php
  2. require('includes/includes.php');
  3.  
  4. //sprawdzanie czy pola nie sa puste
  5. if (empty($_POST["login"]) or empty($_POST["haslo"])) {
  6.  
  7. $braklogowanie = "Nie wpisałeś loginu lub hasła";
  8. echo "brak";
  9. exit();
  10. }
  11.  
  12. $loglogin = mysql_real_escape_string($_POST["login"]);
  13. $loghaslo = mysql_real_escape_string(sha1($_POST["haslo"]));
  14.  
  15. $logowanie = mysql_query("SELECT COUNT(Id_uzytkownika) AS ILE FROM UZYTKOWNICY WHERE Uzytkownik='" .$loglogin. "' and Haslo='" .$loghaslo. "'");
  16. if (!$logowanie) {
  17. die('Bledne zapytanie');
  18. exit();
  19. }
  20. $logowaniedane = mysql_fetch_array($logowanie);
  21.  
  22.  
  23. //sprawdzenie czy dane się zgadzają
  24. if ($logowaniedane["ILE"] != 1) {
  25.  
  26. $bladlogowanie = "Podane dane są nieprawidłowe";
  27. echo "blad";
  28.  
  29. } else
  30. {
  31. $oklogowanie = "ok";
  32. echo "ok";
  33. }
  34.  
  35. ?>


Ten post edytował pitu120 25.03.2011, 20:10:52
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:03