Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql]skrypt logowania-kilka pytań, pytania odnośnie tego kodu
predator
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Przerobiłem troche znaleziony w internecie kod i wygląda on następująco:

index.php
  1. <?php
  2.  
  3. $login = $_POST["login"];
  4. $haslo = $_POST["haslo"];
  5.  
  6.  
  7. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  8.  
  9. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  10. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  11.  
  12. function ShowLogin($komunikat=""){
  13. echo "$komunikat<br>";
  14. echo "<form action='index.php' method=post>";
  15. echo "Login: <input type=text name=login><br>";
  16. echo "Hasło: <input type=text name=haslo><br>";
  17. echo "<input type=submit value='Zaloguj!'>";
  18. echo "</form>";
  19. echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
  20. }
  21.  
  22. ?>
  23. <!DOCTYPE html 
  24. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  25.  <html>
  26. <head>
  27. <title>logowanie</title>
  28. </head>
  29. <body>
  30. <?php
  31. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany";}
  32. if($_SESSION["zalogowany"]!=1){
  33. if(!empty($login) && !empty($haslo)){
  34. {
  35. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){
  36.  
  37.  
  38. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($login)."' AND user_haslo = '".htmlspecialchars(md5($haslo))."'"))){
  39. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  40. $_SESSION["zalogowany"]=1;
  41. $_SESSION['nick'] = htmlspecialchars($login);
  42. } 
  43. else echo ShowLogin("zle haslo!!!");
  44.  
  45. }
  46. else echo ShowLogin("nie dozwolone znaki");
  47. }
  48.  
  49. }
  50. else ShowLogin();
  51. }
  52. else{
  53. ?>
  54. Zalogowałeś się pomyślnie!
  55. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  56. <?php
  57. }
  58. ?>
  59.  
  60. </body>
  61.  </html>
  62. <?php mysql_close(); ?>


rejestruj.php
  1. <?php
  2. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą"); //połączenie z bazą danych
  3. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  4.  
  5. $login = $_POST["login"];
  6. $haslo = $_POST["haslo"];
  7.  
  8. function ShowForm($komunikat=""){ //funkcja wyświetlająca formularz rejestracyjny
  9. echo "$komunikat<br>";
  10. echo "<form action='rejestruj.php' method=post>";
  11. echo "Login: <input type=text name=login><br>";
  12. echo "Hasło: <input type=text name=haslo><br>";
  13. echo "<input type=hidden value='1' name=send>";
  14. echo "<input type=submit value='Zarejestruj'>";
  15. echo "</form>";
  16. }
  17. ?>
  18. <!DOCTYPE html 
  19. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  20.  <html>
  21. <head>
  22. <title>Formularz rejestracyjny</title>
  23. </head>
  24. <body>
  25. <?php
  26. if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  27. if(!empty($login) && !empty($haslo)) //oraz czy uzupełniono wszystkie dane
  28.  
  29. {
  30. if(preg_match('#^[A-Za-z0-9_-]+$#', $login)){ //sprawdzenie poprawnosci znaków
  31.  
  32. if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($login."'"))))ShowForm("Użytkownik o podanym loginie już istnieje!!!");// sprawdzanie czy użytkownik o podanej nazwie już istnieje
  33. else 
  34. {
  35. mysql_query("insert into users values(NULL, '".htmlspecialchars($login)."', '".htmlspecialchars(md5($haslo))."')"); // zapisywanie rekordu do bazy
  36. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  37. }
  38. }
  39. else ShowForm("nie dozwolone znaki");
  40. }
  41.  
  42. else ShowForm("Nie uzupełniono wszystkich pól!!!");
  43. }
  44. else ShowForm();
  45. mysql_close(); //zamykanie połączenia z bazą
  46. ?>
  47. </body>
  48. </html>


1. czy jest ten skrypt bezpieczny? jeśli nie to jakie zmiany proponujecie
2. jak zabezpieczyć najlepiej w md5() hasło do bazy danych?
  1. <?php
  2. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  3. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  4. ?>

3. użyłem funkcji preg_match do zabezpieczenia formularza ale działa on tylko dla jednej zmiennej $login lub $haslo:
  1. <?php
  2. if(preg_match('#^[A-Za-z0-9_-]+$#', $login))
  3. ?>

gdy próbuje napisać tak(by obydwa pola formularza zabezpieczyć, bo co mi da że pole loginu zabezpiecze tylko jeśli w polu hasła można wpisać co sie chce..):
  1. <?php
  2. if(preg_match('#^[A-Za-z0-9_-]+$#', $login, $haslo))
  3. ?>

to pojawia sie błąd.

jak tego użyć by zabezpieczyć obydwa pola?

PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem...

Ten post edytował predator 16.04.2008, 16:35:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Szukałem długo jak zrobić, kombinowałem ale nic... I dlatego tu napisałem.

preg_match" title="Zobacz w manualu PHP" target="_manual za jednym razem może sprawdzać tylko jedną zmienną. Musisz dodać kolejne ify dla kolejnych pól.

Cytat
Katalog tego pliku powinien być wyżej niż index.php ale wyżej sie nie da chyba.

Da się, jeśli masz po zalogowaniu do ftp masz katalog public_html. Tylko najlepiej posługuj się ścieżkami bezwzględnymi.

Cytat
Dlaczego uważasz że takie rozwiązanie lepsze?

Poczytaj o SQL Injection.

Cytat
errory dalej sie pojawiają.

Tzn, jakie?

Cytat
PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem...

Zamiast tagu [ code] używaj [ php]

Ten post edytował erix 16.04.2008, 15:23:00
Go to the top of the page
+Quote Post

Posty w temacie
- predator   [php][mysql]skrypt logowania-kilka pytań   15.04.2008, 17:28:23
- - erix   Zamiast htmlentities" title="Zobacz w manualu PHP"...   16.04.2008, 09:06:49
- - predator   CytatPoczytaj o preg_match Szukałem dług...   16.04.2008, 11:07:16
- - erix   CytatSzukałem długo jak zrobić, kom...   16.04.2008, 15:21:40
- - predator   CytatDa się, jeśli masz po zalogowaniu d...   16.04.2008, 16:52:05
- - erix   CytatNie mam takiego katalogu . Jak inaczej zabez...   16.04.2008, 17:05:29
- - predator   CytatA innego rodzaju błędy są wypi...   19.04.2008, 19:09:17
- - erix   CytatNie wiem jak takie błędy wywo...   20.04.2008, 20:03:59
- - pyro   jezeli serwer bedzie mial wylaczone magic_quotes t...   20.04.2008, 20:14:09
- - erix   http://pl2.php.net/manual/en/function.mysq...tring...   20.04.2008, 20:31:36
- - Crozin   index.php:[PHP] pobierz, plaintext <? session_...   20.04.2008, 21:46:33
- - predator   CytatTak sie zastanawiam i przecież te polece...   21.04.2008, 09:08:52
- - erix   Cytatte pola (obydwa pętlami zabezpieczyłem) mimo ...   21.04.2008, 13:35:47
- - predator   Kod<?php (string)$zmienna ?> ...   21.04.2008, 15:22:15
- - erix   Cytatnie rozumiem, jak mam tego użyć? Tak, jak pok...   21.04.2008, 15:28:03
|- - -predator-   Cytat(erix)[PHP] pobierz, plaintext <?phpempty...   22.04.2008, 11:32:48
- - predator   CytatChoć nie rozumiem trochę, po co... ...   21.04.2008, 16:21:01
- - erix   Cytatteraz jest ok ale tylko to że sie pojawi...   21.04.2008, 16:57:14
- - predator   nie, nie już poradziłem sobie z tamtym CytatNapi...   21.04.2008, 17:11:05
- - erix   [PHP] pobierz, plaintext <?phpif($_POST...   21.04.2008, 17:20:46
- - Mlodycompany   i jeszcze jedna moja uwaga. Przy wylogowywaniu zam...   21.04.2008, 17:22:17
- - predator   Chodziło o index.php bo tam jest to echo. Poprawił...   21.04.2008, 17:49:40
- - erix   Ja bym proponował Ci poprawić wszystkie klamry (na...   21.04.2008, 17:58:03
- - predator   Już rozumiem jak to działa, musi by...   21.04.2008, 18:50:35
- - potreb   [PHP] pobierz, plaintext <?phpif(!$login ...   22.04.2008, 14:57:09
- - predator   Cytati jeszcze jedna moja uwaga. Przy wylogowywani...   22.04.2008, 15:14:53
- - erix   Cytatale parse errory dalej sie pojawiają :/ ...   22.04.2008, 17:45:39
- - predator   CytatSwoją drogą, tak trochę zbacza...   22.04.2008, 18:18:25
- - erix   CytatAle ta funkcja (error_reporting(0) nie blokuj...   22.04.2008, 18:54:11
- - predator   CytatTo Ci podałem przepis z isset. też nie dział...   22.04.2008, 19:22:07
- - erix   A jaki kod Ci teraz wyszedł...? Co masz na myśli ...   22.04.2008, 19:52:18
- - predator   CytatA jaki kod Ci teraz wyszedł...? Kod $l...   22.04.2008, 20:13:55


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: 26.09.2025 - 23:56