Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql]skrypt logowania-kilka pytań, pytania odnośnie tego kodu
predator
post 15.04.2008, 17:28:23
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
predator
post 19.04.2008, 19:09:17
Post #2





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

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


Cytat
A innego rodzaju błędy są wypisywane? (np. notice, warning, itp)

Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią.

Tak sie zastanawiam i przecież te polecenia z formularza są najpierw wysyłane do serwera i on je analizuje. Więc w bazie danych nic nikt nie namiesza ale na serwerze chyba może. Trzeba by było po stronie użytkownika sprawdzić najpierw chyba np poprzez java script dry.gif

Cytat
Jeśli masz dostęp do .htaccess, to za pomocą tego pliku możesz zabezpieczyć.

nie mam :/

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?

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?

P.S.
Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być?
  1. <?php
  2. if(mysql_num_rows(mysql_query("select * from users where user_login = '".mysql_escape_string(htmlspecialchars($login))."' AND user_haslo = '".mysql_escape_string(htmlspecialchars(md5($haslo)))."'"))){
  3. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  4. $_SESSION["zalogowany"]=1;
  5. $_SESSION['nick'] = mysql_escape_string(htmlspecialchars($login));
  6. }
  7. ?>


ma ktoś jakiś pomysł?

Ten post edytował predator 16.04.2008, 18:30:51
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:32