Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Bezpieczne logowanie
kiler129
post
Post #1





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Siedzę już od rana i prubuję wymyślec dobre logowanie ale ni w ząb nie mogę nic wymyslić. Co prawda zrobiłem taki system ale opiera się o na sprawdzaniu czy w POST są dane ale jak user wejdzie w inny katalog (tworzę internetowy dysk) to te dane z post znikają i zostaje wywalony dry.gif
Pomyślałem aby zrobic tak ze jak się zaloguje i hasło i login będą się zgadać to ustawia ciacho z zawartościa zalogowany i tyle ale sęk w tym że jeśli ktoś zaloguje się na swój internetowy dysk z loginem np. zosia i zostanie przeniesiony do strony strona.pl/zosia i tam ma swój skrypt to gdy teraz wpisze sobie w pasku adresu strona.pl/marysia to skrypt sprawdzi że ok, jest w ciachu zalogowany wiec dopuści.
Czy ktoś może mi podsunąć pomysł jak to zrobić ?
Więc tak, pomyślałem że zrobię z tym ciachem ale w ciachu będzie pisać jeszcze katalog - dobre rozwiązanie ?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Poczytaj o sesjach w PHP. Możesz w nich zapisać czy użytkownik jest zalogowany czy nie oraz nazwę katalogu do jakiego ma mieć dostęp.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
misiek172
post
Post #3





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


ciacha nie są dobre bo są client-side natomiast sesje są server-side i teoretycznie nie ma do nich dostępu potenjalny użytkownik, więc popieram Kicok'a jężeli chodzi o zastosowanie sesji a są one dość proste: (każda osoba ma swój unikatowy numer sesji, który dostępy jest pod poleceniem session_id();
  1. <?php
  2. $_SESSION['zalogowany'] = 1; //jeśli zalogowany lub 0 jeśli nie
  3. $_SESSION['nick'] = 'nick użytkownika';
  4. ?>

a wyświetlasz je tylko echo $_SESSION['zalogowany'] itd smile.gif


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
kiler129
post
Post #4





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Poczytałem troszkę o sesjach i jakos nie rozumiem zabardzo o co w tym chodzi tongue.gif

Więc mam sobie folder X a w nim foldery kasia, zosia, marysia. No i w kazdym znich skrypt który pozwala zarządzać tym katalogiem. Problem jest taki że nie wiem jak zrobić to logowanie. Bo przeiciez user kasia nie może miec dostepu do folderu zosia itd.

Czy w sesjach moge sobie przekazywac dowolną ilośc danych ?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
Post #5





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

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


ile chcesz ... choć za duża ilość danych nie jest wskazana

Nie mam co robić więc ci to jakoś wyjaśnie ...
- Masz tablicę superglobalną $_SESSION ... Jak się zapisuje dane w tablicy to powinieneś wiedzieć ...
- Dane z post sprawdzasz tylko raz przy logowaniu... zapisujesz sobie czy użytkownik to zosia czy kasia...
- przy dostępie do katalogów sprawdzasz czy wartość zapisana w sessji ma określoną wartość
Go to the top of the page
+Quote Post
kiler129
post
Post #6





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Te sesje są *** już meni zaczynają wkurzać. Sesja po zalogowaniu ok, jest ale jak wpisze w pasku adresu adres gdzie pobierane sa dane z sesji to tej sesji nie ma !
Poza tym zastanawiam się skąd serwer wie o którą sesję chodzi ?!

edit: Sesje moje kochane przepraszm was, zapomniałem was wystrtować tongue.gif

Teraz mam problem jak zrobic wylogowanie ? Tzn. jak tą sesję zniszczyć ?

ecit: oświadczam oficialnie że sesje sa huja warte !
Namęczyłęm się przystowałem wszytko do sesji i co widze ? Zalgowałem się jako kasia i owszem w kasi buszuje, teraz wpisałem bez logowania się się katalog basia i co ? No nie wyświetlił sie, odświerzyłem stronę i się pokazał bez logowania exclamation.gif! i w sesji się login zmienił - co jest do cholery ?!

Ten post edytował kiler129 19.03.2007, 14:40:32


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
Post #7





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

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


Dobra dobra smile.gif zaraz ci wszystko wyjaśnie ...
Cytat
Poza tym zastanawiam się skąd serwer wie o którą sesję chodzi ?!

session_id(); ... pokazuje ci id sesji. Takie samo id jest zapamiętywane w cookies przeglądarki ( może być także przekazane metodą GET ) i jest rzeczą świętą :!: jeżeli ci 'ukradną' id podczas gdy sesja jeszcze nie wygasła to może być równe z utratą serwisu...
Cytat
Teraz mam problem jak zrobic wylogowanie ? Tzn. jak tą sesję zniszczyć ?

session_destroy(); smile.gif nie wiem czy słyszałeś o tej funkcji ale na pewno stwierdzenie 'zniszczyć' tu pasuje tongue.gif
Cytat
ecit: oświadczam oficialnie że sesje sa huja warte !

Tego może nie będe komentował ... powiem tylko tyle że bez sesji nie ma życia ...

Co do startu sesji to musi być to na każdej stronie ... ale to chyba oczywiste

a to że ci nie wychodzi :?: to już na sesje nie zwalaj
Go to the top of the page
+Quote Post
kiler129
post
Post #8





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


No tak ale dlaczego tak jest ze sesja się jakby sama dososowuje ?
Trudno będzie luka ;P Kiedyś ją poprawie. A co do sesion_destroy() to nie pomyślałem, szukałem sesion_stop(), sesion_kill() itp tongue.gif


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
misiek172
post
Post #9





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


po 1 id sesji musisz przekazywać a) w cookie b ) post c) get, wybierz sobie jedną z metod smile.gif

potem na początku każdego dokumentu dajesz:
  1. <?php
  2. session_id($_REQUEST['PHPSESSID']);
  3. ?>


Ten post edytował misiek172 19.03.2007, 18:28:53


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
kiler129
post
Post #10





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


jakoś nie rozumiem, po co dawać session_id($_REQUEST['PHPSESSID']); ?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
Post #11





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

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


na razie zostawiaj session id w cookies ... bo ci się za bardzo za gmatwa smile.gif
i jak na razie tego nie musisz pisać
to znaczy pisz tylko session_start();
Go to the top of the page
+Quote Post
misiek172
post
Post #12





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


tylko że jak ktoś ma wyłączone cookie to lipa, nie będzie działać. Sesja się utworzy inna nowa, a co za tym idzie skasują się zmienne. winksmiley.jpg


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
kiler129
post
Post #13





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Wiesz co tak serio to żadko widuje kogoś z wyłaczonymi ciachami tongue.gif
Co ja bym bez was zrobił ? W informacjach o skrypcie będa wasze nicki jako tych co nabardziej pomogli w pisaniu smile.gif
Wiec jak narazie beta 3 w 98% gotowa, tylko tworzenie userów zostało smile.gif

a tak na marginesie to jak skopiowac cały katalog wraz z zawartością ?


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
misiek172
post
Post #14





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


zdaje mi się że nie ma konkretnego polecenia do tego... bedziesz musiał napisać sobię taką funkcje która tworzy katalog w danym miejscu o tej samej nazwie co katalog do skopiowania i potem kopiuj zawartość katalogu czyli pliki. Będzie musiał też pomyśleć o pęlach sprawdzających czy w katalogu nie ma drugiego katalogu ... troche zagmatwane i wymaga rekurencji.

Ten post edytował misiek172 19.03.2007, 19:30:24


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
kiler129
post
Post #15





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


misiek172 mam wrżnie że ty jak widzisz jakieś zadanie to szukasz najtruniejszego rozwiaznia winksmiley.jpg
Z katalogu bede kopiowal do drugiego 3 pliki - download, index, logout i tworzył cfg smile.gif
Myślałem ze będe leniwy i zrobię tak ze tylko coś w stylu copy -> past i utowrze cfg a jednak musze kazdy plik kopiować tongue.gif Trundo smile.gif


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
misiek172
post
Post #16





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


znaczy ja poprostu nie znam i nie słyszałem o poleceniu kopiującym folder z zawartością biggrin.gif chyba że byś uzył innego języka do tego niż PHP winksmiley.jpg

a jeśli chodzi o to kopiowanie to przecierz nei takie złe, pobierasz nazwy plików to tablicy oraz nazwe folderu. Tworzysz folder w danym miejscu i pętelką kopiujesz pliki do stworzonego folderu biggrin.gif

Ten post edytował misiek172 19.03.2007, 20:00:44


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Heweliusz
post
Post #17





Grupa: Zarejestrowani
Postów: 46
Pomógł: 8
Dołączył: 19.03.2007
Skąd: z nad Jarugi

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


Z tego co słyszałem, mechanizm sesi zawarty w php4 (chyba od 4 wersi) nie jest zbyt praktyczny i lepiej napisać własny jako bezpieczniejszy.
Mi samemu sesie napsuły krwi dry.gif


--------------------
Aktualny projekt: Nauka OOP :)
Go to the top of the page
+Quote Post
vokiel
post
Post #18





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Ja lubię sesje, więc Ci pomogę:

plik z formularzem logowania
form.html
  1. <form name="logowanie" method="POST" action="index.php">
  2. <input type="text" name="login" title="Pole loginu"> <br />
  3. <input type="password" name="haslo" title="Pole hasła"> <br />
  4. <input type="submit" name="submit" value="Loguj" title="Zaloguj">
  5. </form>


plik logowanie.php
  1. <?php
  2. if (isset($_POST['login']) && isset($_POST['haslo']))
  3. {
  4. //jezeli uzytkownik wlasnie podjal probe logowania
  5. $login = $_POST['login']; $haslo = $_POST['haslo'];
  6.  
  7. //sprawdzamy czy mamy użytkownika w bazie
  8. include ('polaczenie.php');
  9. $md5 = md5($haslo);
  10. $zapytanie = "SELECT * FROM uprawnieni WHERE login='$login' AND haslo='$md5';";
  11. $wykonaj = mysql_query($zapytanie);
  12. $wiersz = mysql_fetch_array($wykonaj);
  13.  
  14. if (mysql_affected_rows()>0) //istnieje uzytkownik o podanym loginie i hasle
  15. {
  16. $_SESSION['nazwa_uzytkownika']=$login; 
  17.  //zapisujemy kto się zalogował (później wykorzystamy do kontroli dostępu do katalogów)
  18. }
  19. }
  20.  
  21. if (isset($_SESSION['nazwa_uzytkownika']))
  22. {
  23. $print = "Zalogowany użytkownik.<br />
  24.  Witaj :<strong>".$_SESSION['nazwa_uzytkownika']."</strong>
  25. <a href="wyloguj.php">Wyloguj</a>"; //w wyloguj.php wstawiamy funkcję: session_destroy()
  26. }
  27. else
  28. {
  29. if (isset($login)) //jezeli proba lgogowania sie nie powiodla
  30. {
  31. $print = "<strong>Nieudane logowanie!</strong>";
  32. }
  33. else //nie bylo proby logowania lub nastapilo wylogowanie
  34. {
  35. $print = "Niezalogowany(a)</strong>";
  36. }
  37.  //tworzenie formularza logowania
  38.  $tworzenie_form=true;
  39.  }
  40.  ?>


plik index.php
  1. <?php
  2. include('logowanie.php');
  3.  
  4. if (isset($_SESSION['nazwa_uzytkownika']))
  5. {
  6.  echo $print;
  7. }
  8. else
  9. {
  10.  echo $print;
  11. //tworzenie formularza logowania
  12. if ($tworzenie_form==true)
  13. {
  14. include('form.html');
  15. }
  16. ?>


troche to na około ale działa,
odpalasz w przeglądarce plik index.php on wywołuje plik logowanie.php, jeśli nie było logowania lub było błędne to do zmiennej $print jest zapisywana stosowna informacja i wyświetlany jest formularz logowania. jeśli użytkownik się zalogował poprawnie to do zmiennej $print zapisywana jest jego nazwa i link do wylogowania.
Potem w plikach w tych folderach do których mają dostęp tylko wybrane osoby sprawdzasz:
  1. <?php
  2. if (isset($_SESSION['nazwa_uzytkownika']) && ($_SESSION['nazwa_uzytkownika']='nick użytkownika') )
  3.  {
  4. echo "Masz dostęp do tego katalogu:)";
  5.  } 
  6. else 
  7.  
  8.  {
  9. echo "Brak uprawnień!!! Wypad! ;)";
  10.  }
  11. ?>


--------------------
Go to the top of the page
+Quote Post
misiek172
post
Post #19





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


masz w ostatnim błąd po 1 w if dajemy do porównania '==' a nie '='

po 2 to

if (isset($_SESSION['nazwa_uzytkownika']) && ($_SESSION['nazwa_uzytkownika']='nick użytkownika') )

jest bez sensu, wystarczy samo

if ($_SESSION['nazwa_uzytkownika']=='nick użytkownika')

bo jeśli ma wartość to wiadomo że istnieje smile.gif przecierz nie może mieć wartość i nie być isset ;p


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Kicok
post
Post #20





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat
po 2 to

if (isset($_SESSION['nazwa_uzytkownika']) && ($_SESSION['nazwa_uzytkownika']='nick użytkownika') )

jest bez sensu, wystarczy samo

if ($_SESSION['nazwa_uzytkownika']=='nick użytkownika')

bo jeśli ma wartość to wiadomo że istnieje smilingsmiley.gif przecierz nie może mieć wartość i nie być isset ;p


Ale samo $_SESSION['nazwa_uzytkownika']=='nick użytkownika' wygeneruje wyjątek E_NOTICE, jeśli zmienna $_SESSION['nazwa_uzytkownika'] nie będzie zadeklarowana. A jeśli użytkownik nie będzie zalogowany, to ta zmienna raczej zadeklarowana nie będzie.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 21.08.2025 - 09:11