Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie admina strony
Forum PHP.pl > Forum > PHP
aagaaz
Witam.

Mam problem z logowaniem admina.
W pliku login.php umiescilam kod:
  1. if ($_POST['login']=='admin'and $_POST['haslo']=='admin')
  2. {
  3. header('Location:admin/panel_admin.php');
  4. }


ale chcialabym , aby pobieral zaszyfrowane haslo admina, ktore mam w bazie danych.

Może cie mi pomóc...
Mephistofeles
Czytaj. Btw takie coś to żadne zabezpieczenie. Wystarczy wpisać adres admin/panel_admin i już masz dostęp do panelu.
aagaaz
Dlatego chciałam , aby haslo bylo pobierane zaszyfrowane... z bazy sql
daros17
Poczytaj o md5 i sha1, sesjach
Mephistofeles
Dobrze, ale nie w tym problem. I tak nikt nie odczyta wartości zmiennych i parametrów ze skryptu bez dostępu do kodu. Problem w tym, że przekierowujesz po prostu na stronę panelu, zamiast zrobić np. include i po stronie panelu sprawdzać, czy admin jest zalogowany, do czego stosuje się sesje.

I jeszcze jedno, haseł w bazie się nie szyfruje, a hashuje (jest to jednostronna operacja) smile.gif. Zajrzyj do wspomnianego tutoriala, tam powinno być wszystko opisane.
aagaaz
Czy bez tej autoryzacji nie można zalogować admina...

modern-web
To co ty robisz to tzw. "przekierowanie" po sprawdzeniu wpisanych wartości...
Logowanie wyróżnia się tym, że TYLKO zalogowani mają dostęp do tej treści.
Jeśli chcesz zabezpieczyć panel_admin przed niepowołanymi gośćmi po prostu sprawdź na początku tego pliku, czy dana sesja istnieje. Jeśli nie to zastosuj header (przekierowanie) na stronę z możliwością zalogowania smile.gif

Nic trudnego.
Wpisz w google: php session i jeden z trzech pierwszych linków powinien dostarczyć Ci wszystkich niezbędnych informacji.

Pozdrawiam!
aagaaz
No mam sprawdzenie sesji...

  1. if(isset($_SESSION['login']))
  2. {
  3.  
  4. echo'<h3>Zostałeś poprawnie zalogowany <br />
  5. Teraz możesz zająć się porządkiem na stronie :) </h3><br />';
  6. }
  7. else
  8. {
  9. echo'<h2>Wyjdź stąd , ta strona nie jest dla Ciebie...</h2>';
  10. }


ale nie wiem jak tu ustawić , że ma być zalogowany admin....

A w pliku login mam przekierowanie...

  1. if ($_POST['login']==$login and $_POST['haslo']==$haslo){
  2. include('admin/admin.php');
  3. header('Location:./admin/panel_admin.php');
  4. }



pyro
Może spróbuj coś w ten deseń:

  1.  
  2. if ($_POST['login']==$login and $_POST['haslo']==$haslo || !empty($_SESSION['admin'])) {
  3.  
  4. $_SESSION['admin'] = true;
  5.  
  6. header('Location:./admin/panel_admin.php');
  7.  
  8. }


panel_admin.php:

  1. <?php
  2.  
  3. if(empty($_SESSION['admin']))
  4. {
  5. echo 'Najpierw się zaloguj...';
  6. }
  7.  
  8. // dalsza czesc panel_admin.php
  9.  
  10. ?>
aagaaz
Wogóle nie przenosi mnie po zalogowaniu na strone panel admin..
Może nie w tym miejscu umieściłam kod sprawdzania...
Możecie sprawdzić...

  1. <?php
  2.  
  3. include ('db.php');
  4.  
  5.  
  6. if(isset($_POST['Zaloguj']))
  7. {
  8.  
  9.  
  10. $id=$_POST['id'];
  11. $login = $_POST['login'];
  12. $haslo = $_POST['haslo'];
  13.  
  14. // sprawdzamy czy wszystkie dane zostały podane
  15. if(empty($login) || empty($haslo))
  16. {
  17. echo '<h3>Wpisz wszystkie pola!</h3>';
  18.  
  19. }
  20. else
  21. {
  22. // filtrujemy dane
  23.  
  24. // kodujemy hasło
  25. $haslo = md5($haslo);
  26.  
  27. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  28. $result = mysql_query("SELECT * FROM uzytkownicy WHERE login='$login' AND haslo='$haslo'");
  29.  
  30. if(!mysql_num_rows($result))
  31.  
  32. echo '<h3> Niestety podałęs niepoprawne dane!</h3>';
  33.  
  34. else
  35. {
  36. // dodajemy wynik zapytania do tablicy
  37. $row = mysql_fetch_assoc($result);
  38.  
  39. // ustawianie sesji że użytkownik jest zalogowany
  40. $_SESSION['logged'] = true;
  41.  
  42. // dodawanie do sesji loginu
  43.  
  44. $_SESSION['login'] = $row['login'];
  45. $_SESSION['id'] = $row['id'];
  46.  
  47.  
  48.  
  49. }
  50. }
  51. }
  52.  
  53. // sprawdzamy czy user jest już zalogowany
  54. if(isset($_SESSION['login']))
  55. {
  56. if ($_POST['login']==$login and $_POST['haslo']==$haslo || !empty($_SESSION['admin'])) {
  57.  
  58. $_SESSION['admin'] = true;
  59.  
  60. header('Location:./admin/panel_admin.php');
  61.  
  62. }
  63.  
  64. // wyświetlamy userowi jego dane
  65. echo '<h3><br />Witaj '.$_SESSION['login'].'!<br /></h3>';
  66.  
  67.  
  68. $zapytanieSelect="SELECT ostatnie_log FROM uzytkownicy WHERE login='$login'";
  69.  
  70. $wykonaj = mysql_query ($zapytanieSelect);
  71.  
  72. $wiersz=mysql_fetch_array($wykonaj);
  73. echo'<h4>Data ostatniego logowania:</h4>';
  74. echo $wiersz[6]."<br>";
  75.  
  76. <form action="wyloguj.php" method="post" >
  77.  
  78. <a href="edytujprofil.php">Edytuj profil</a><br/>
  79. <a href="dodajplik.php">Dodaj pliki</a><br />
  80. <a href="dodajkomentarz.php">Dodaj komentarz</a><br />
  81. <a href="wiadomosci/dodajwiadomosc.php">Prywatne wiadomości</a>
  82.  
  83. <p>
  84. <input type="submit" name="Wyloguj" value="Wyloguj" size="20" class="button">
  85. </p>
  86.  
  87. </form>';
  88.  
  89. }
  90. header('Location: '.$_POST['URI']);
  91.  
  92. // rozłączenie z bazą danych
  93.  
  94. ?>
ADeM
Włącz raportowanie błędów i powiedz czym sypie.
Na początku pliku dodaj session_start().
pyro
1. Zobacz, czy na początku pliku nie masz jakichś znaków (nawet zwykłej spacji) i jeśli plik jest kodowany w UTF-8, to czy jest kodowany bez nagłówka BOM

2. Nie wiem po co to dałaś:

Cytat
header('Location: '.$_POST['URI']);


bo:
a.) To i tak nie zadziała, bo wyżej wyświetlasz dane
b.) Jakby działało, to skrypt byłby podatny na Phishing

3. Po co te całe htmlspecialchars na dane jeśli:
a.) hasło i tak jest kodowane md5, więc i tak bazie nie zagrozi
b.) mysql_real_escape_string() wystarczy do zabezpieczenia przed SQL Injection
c.) Jak usuniesz stamtąd htmlspecialchars(), to uzywaj go przy wyświetlaniu danych.
Rid
Cytat(pyro @ 5.12.2010, 23:27:12 ) *
1. Zobacz, czy na początku pliku nie masz jakichś znaków (nawet zwykłej spacji) i jeśli plik jest kodowany w UTF-8, to czy jest kodowany bez nagłówka BOM

2. Nie wiem po co to dałaś:



bo:
a.) To i tak nie zadziała, bo wyżej wyświetlasz dane
b.) Jakby działało, to skrypt byłby podatny na Phishing

3. Po co te całe htmlspecialchars na dane jeśli:
a.) hasło i tak jest kodowane md5, więc i tak bazie nie zagrozi
b.) mysql_real_escape_string() wystarczy do zabezpieczenia przed SQL Injection
c.) Jak usuniesz stamtąd htmlspecialchars(), to uzywaj go przy wyświetlaniu danych.

1.Funkcja usuwająca spacje -trim ,jeden kłopot mniej
3.Funkcje typu htmlspecialchars,htmlentities - konwertują znaki specjalne na Encje-jak użyjesz polskiej literki to funkcja potraktuje ją jak znak specjalny i zamieni np. "ó" na &auml -jednakże funkcje te chronią przed atakami XSS jak również addslashes i stripsslashes dodające lub ujmujące w określonych przypadkach ukośniki.Chronią one dokument php przed atakami XSS nie SQLInjection-do tego służy właśnie mysql_real_escape_string() która bezpośrednio zabezpiecza bazę danych.Najlepszym sposobem zabezpieczenia pól według mnie jest zastosowanie wyrażeń regularnych poprzez funkcje preg_match ,ja staram się używać całego dostępnego"arsenału" aby zabezpieczyć i dokument i bazę danych.Nic to nie zaszkodzi przecież aaevil.gif
aagaaz
header('Location: '.$_POST['URI']);

Dałam to po to , żeby logowanie odbywało się na tej stronie na której się znajduję... i to działa...

A chciałam tez aby po wpisaniu logina i hasla admina przenosilo mnie na strone panel admin... Bo nie chce panela umieszczać w menu, tylko zeby byl dostepny jak sie zaloguje na admina...
pyro
Cytat(Rid @ 6.12.2010, 00:25:32 ) *
1.Funkcja usuwająca spacje -trim ,jeden kłopot mniej
3.Funkcje typu htmlspecialchars,htmlentities - konwertują znaki specjalne na Encje-jak użyjesz polskiej literki to funkcja potraktuje ją jak znak specjalny i zamieni np. "ó" na &auml -jednakże funkcje te chronią przed atakami XSS jak również addslashes i stripsslashes dodające lub ujmujące w określonych przypadkach ukośniki.Chronią one dokument php przed atakami XSS nie SQLInjection-do tego służy właśnie mysql_real_escape_string() która bezpośrednio zabezpiecza bazę danych.Najlepszym sposobem zabezpieczenia pól według mnie jest zastosowanie wyrażeń regularnych poprzez funkcje preg_match ,ja staram się używać całego dostępnego"arsenału" aby zabezpieczyć i dokument i bazę danych.Nic to nie zaszkodzi przecież aaevil.gif


Bardzo fajnie, że podałeś błędne definicje i błędne założenia, a do tego nie przeczytałeś tego co napisałem, a ponadto podałeś błędne wnioski. Więc powiedz mi, po co to napisałeś ph34r.gif ?

Cytat
Dałam to po to , żeby logowanie odbywało się na tej stronie na której się znajduję... i to działa...


Dokładnie to samo by się działo, jakbyś usunęła tę linijkę, ale jeśli Cię uszczęśliwia to możesz ją zostawić tongue.gif

Zwróć uwagę na 1 punkt mojego poprzedniego postu (jeśli cokolwiek wyświetlasz przed podaniem header, to nie zostanie wykonany ten header), a ponadto na początku swojego pliku wklej:

  1.  
  2. echo ini_get('display_errors') ? '' : 'WLACZ DYREKTYWE DISPLAY_ERRORS';


I zobacz wynik, szczególnie zwróć uwagę na błędy typu 'headers already sent...'.

Jeśli to nie zadziała, to ściągnij wtyczkę podglądającą nagłówki HTTP, np. Tamper Data i zobacz czy nagłówek Location jest na pewno przesyłany.
aagaaz
Kodowanie jest ok...

Włączyłam raportowanie błędów i nic nie pokazuje ...

Przerobiłam trochę i pokazuje mi błędy... i logowanie dziala na stronie na której aktualnie jestem .... Ale nie działa przekierowanie na panel admina...
Nie pokazuja się błędy typu header...

  1. <?php
  2.  
  3. include ('db.php');
  4.  
  5.  
  6. if(isset($_POST['Zaloguj']))
  7. {
  8.  
  9.  
  10. $id=$_POST['id'];
  11. $login = $_POST['login'];
  12. $haslo = $_POST['haslo'];
  13.  
  14. // sprawdzamy czy wszystkie dane zostały podane
  15. if(empty($login) || empty($haslo))
  16. {
  17. echo '<h3>Wpisz wszystkie pola!</h3>';
  18. echo '<meta http-equiv="refresh" content="3; URL=../index.php">';
  19.  
  20. }
  21. else
  22. {
  23. // filtrujemy dane
  24.  
  25. // kodujemy hasło
  26. $haslo = md5($haslo);
  27.  
  28. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  29. $result = mysql_query("SELECT * FROM uzytkownicy WHERE login='$login' AND haslo='$haslo'");
  30.  
  31. if(!mysql_num_rows($result))
  32.  
  33. echo '<h3> Niestety podałeś niepoprawne dane!</h3>
  34. <meta http-equiv="refresh" content="3; URL=../index.php">';
  35.  
  36. else
  37. {
  38. // dodajemy wynik zapytania do tablicy
  39. $row = mysql_fetch_assoc($result);
  40.  
  41. // ustawianie sesji że użytkownik jest zalogowany
  42. $_SESSION['logged'] = true;
  43.  
  44. // dodawanie do sesji loginu
  45.  
  46. $_SESSION['login'] = $row['login'];
  47. $_SESSION['id'] = $row['id'];
  48.  
  49.  
  50.  
  51. }
  52. }
  53. }
  54.  
  55. // sprawdzamy czy user jest już zalogowany
  56. if(isset($_SESSION['login']))
  57. {
  58. header('Location: '.$_POST['URI']);
  59.  
  60. // wyświetlamy userowi jego dane
  61. echo '<h3><br />Witaj '.$_SESSION['login'].'!<br /></h3>';
  62.  
  63.  
  64. $zapytanieSelect="SELECT ostatnie_log FROM uzytkownicy WHERE login='$login'";
  65.  
  66. $wykonaj = mysql_query ($zapytanieSelect);
  67.  
  68. $wiersz=mysql_fetch_array($wykonaj);
  69. echo'<h4>Data ostatniego logowania:</h4>';
  70. echo $wiersz[6]."<br>";
  71.  
  72. <form action="wyloguj.php" method="post" >
  73.  
  74. <a href="edytujprofil.php">Edytuj profil</a><br/>
  75. <a href="dodajplik.php">Dodaj pliki</a><br />
  76. <a href="dodajkomentarz.php">Dodaj komentarz</a><br />
  77. <a href="wiadomosci/dodajwiadomosc.php">Prywatne wiadomości</a>
  78.  
  79. <p>
  80. <input type="submit" name="Wyloguj" value="Wyloguj" size="20" class="button">
  81. </p>
  82.  
  83. </form>';
  84.  
  85. }
  86. else
  87. {
  88. if ($_POST['login']==$login and $_POST['haslo']==$haslo || !empty($_SESSION['admin']))
  89. {
  90.  
  91. $_SESSION['admin'] = true;
  92. header('Location:admin/panel_admin.php') ;
  93.  
  94. }
  95. }
  96.  
  97.  
  98. // rozłączenie z bazą danych
  99.  
  100. ?>
jesus61
To może napisz jakie błędy się pokazują.
A tak poza tym to:
1. Zakładam że session_start() jest w pliku db.php albo jakimś wcześniejszym, bo jeżeli go nie ma to całość nie ma sensu.
2. "else" z linijki 89 ( ten co ma przekierować ) wykona się tylko gdy użytkownik nie jest zalogowany ( patrz "if" z linijki 58 ) co miało by sens gdyby konto admina nie było wpisane do bazy danych.
3. "if" z linijki 91 jest moim zdaniem bez sensu ze względu na linijki 11, 12 oraz 24, 25, 28. $login będzie "prawie" zawsze zgodny z $_POST['login'] a $haslo z $_POST['haslo'] nigdy! Pomijając fakt że to wygląda tak jakby każdy był adminem O.O

Poprawcie mnie jeżeli coś źle zrozumiałem/napisałem winksmiley.jpg

EDIT: Znalazłem trochę czasu więc takie coś:

Zakładając że admin loguje się jak każdy normalny użytkownik i ma konto wpisane do bazy danych:
  1. <?php
  2. include ('db.php');
  3.  
  4. if(isset($_POST['Zaloguj']))
  5. {
  6.  
  7.  
  8. $id=$_POST['id'];
  9. $login = $_POST['login'];
  10. $haslo = $_POST['haslo'];
  11.  
  12. // sprawdzamy czy wszystkie dane zostały podane
  13. if(empty($login) || empty($haslo))
  14. {
  15. echo '<h3>Wpisz wszystkie pola!</h3>';
  16. echo '<meta http-equiv="refresh" content="3; URL=../index.php">';
  17.  
  18. }
  19. else
  20. {
  21. // filtrujemy dane
  22.  
  23. // kodujemy hasło
  24. $haslo = md5($haslo);
  25.  
  26. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  27. $result = mysql_query("SELECT * FROM uzytkownicy WHERE login='$login' AND haslo='$haslo'");
  28.  
  29. if(!mysql_num_rows($result)) echo '<h3> Niestety podałeś niepoprawne dane!</h3> <meta http-equiv="refresh" content="3; URL=../index.php">';
  30. else
  31. {
  32. // dodajemy wynik zapytania do tablicy
  33. $row = mysql_fetch_assoc($result);
  34. // ustawianie sesji że użytkownik jest zalogowany
  35. $_SESSION['logged'] = true;
  36. // dodawanie do sesji loginu
  37. $_SESSION['login'] = $row['login'];
  38. $_SESSION['id'] = $row['id'];
  39. }
  40. }
  41. }
  42.  
  43. // sprawdzamy czy user jest już zalogowany
  44. if(isset($_SESSION['login']))
  45. {
  46. // to przenosi admina do panel_admin.php
  47. $LOGIN_ADMINA = 'admin';
  48. if ( $LOGIN_ADMINA == $_SESSION['login'] || $_SESSION['admin'] == true )
  49. {
  50. $_SESSION['admin'] = true;
  51. header('Location: admin/panel_admin.php');
  52. }
  53.  
  54. header('Location: '.$_POST['URI']);
  55. // wyświetlamy userowi jego dane
  56. echo '<h3><br />Witaj '.$_SESSION['login'].'!<br /></h3>';
  57.  
  58.  
  59. $zapytanieSelect="SELECT ostatnie_log FROM uzytkownicy WHERE login='$login'";
  60. $wykonaj = mysql_query ($zapytanieSelect);
  61. $wiersz=mysql_fetch_array($wykonaj);
  62. echo '<h4>Data ostatniego logowania:</h4>';
  63. echo $wiersz[6]."<br>";
  64.  
  65. echo '<form action="wyloguj.php" method="post" >
  66. <a href="edytujprofil.php">Edytuj profil</a><br/>
  67. <a href="dodajplik.php">Dodaj pliki</a><br />
  68. <a href="dodajkomentarz.php">Dodaj komentarz</a><br />
  69. <a href="wiadomosci/dodajwiadomosc.php">Prywatne wiadomości</a><p>
  70. <input type="submit" name="Wyloguj" value="Wyloguj" size="20" class="button">
  71. </p></form>';
  72. }
  73.  
  74.  
  75. // rozłączenie z bazą danych
  76. ?>


Ustawiasz login admina w zmiennej w linijce 49 i powinno działać.
PS. Pozwoliłem sobie trochę .... wytrimować(?) kod biggrin.gif
aagaaz
WIELKIE DZIĘKI smile.gif

Działa ...

Plusik dla CIEBIE
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.