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
Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią.

Błąd składni uniemożliwia działanie skryptu.

Reszta (notice, warning) nie.

Cytat
Ale pliku php nie można podejrzeć podobno, tylko jakimiś zapytaniami lub jakoś inaczej. Są też programy do ściągania stron ale one tylko w html'u ściągają? albo sie myle?

Cytat
Jakich błędów sie wystrzegać by nikt np w swoim skrypcie includując mój index.php nie podejrzał zakładając ze w tym index.php jest hasło?


No, w Twoim wypadku jest OK; IMHO najbezpieczniej trzymać dane autoryzacyjne właśnie w ten sposób - jako parametry funkcji, a nie jako zmienne w jakimś pliku konfiguracyjnym. Można również w taki sposób, ale dodawaj np. usuwanie danych ze zmiennej konfiguracyjnej zaraz po podłączeniu, wyłącz wyświetlanie błędów, a jeśli nie chcesz (czasem się przyda), to utwórz własnego handlera (patrz: set_error_handler" title="Zobacz w manualu PHP" target="_manual i np. loguj je do pliku.

Cytat
Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być?

Do md5" title="Zobacz w manualu PHP" target="_manual nie musisz żadnej funkcji zabezpieczającej stosować, bo ona Ci nie zwróci żadnych znaków, które mogłbyby "popsuć" zapytanie (pomijam przypadek, w którym funkcja byłaby uszkodzona, ale dużo bardziej jest prawdopodobne, że ktoś włamie się na serwer i podejrzy interesujące go pliki). Swoją drogą, nie rozumiem, po co dodatkowo dajesz htmlspecialchars" title="Zobacz w manualu PHP" target="_manual przy zapytaniu. Bardziej kłopotliwe, bo znaki specjalne zamieni na encje (więcej miejsca w bazie; nazbiera się więcej loginów i trochę miejsca zajmie. Fakt, wartości znikome, ale grosik do grosika...).

Ten post edytował erix 20.04.2008, 20:05:05
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 - 10:22