Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel logowania sesje
Forum PHP.pl > Forum > PHP
marcus753
Witam jestem początkującym programistą php i powoli zaczynam planować Panel logowania zależy mi aby był dość bezpieczny dlatego zastanawiam się słyszałem że trzymanie danych w sesjach jest dość niebezpieczne i grozi włamaniem na strone dlatego zastanawiam sie czy jest inny sposób albo jak zabezpieczyć sesje tak aby można w nich było trzymać poufne dane

pozdrawiam i z niecierpliwością czekam na odpowiedź
za pomoc z góry dziękuje
erix
Znowu...?

A użyłeś chociaż raz wyszukiwarki?
marcus753
tak szukałem informacji na temat paneli logowania i sesji ale znalazłem tylko jakieś bzdety albo gotowe panele...
moja znajomość techniczna pozwala mi na zrobienie panelu logowania ale zastanawiam się co umieścić w sesjach ?
na samym początku miałem taki pomysł w pliku index.php wpisujemy hasło i login w pliku logowanie.php sprawdzamy czy login jest w bazie i czy hasło sie zgadza jeśli tak to do sesji przypisujemy wartość np. 5 i przechodzimy do pliku zabezpieczone.php tutaj sprawdzamy wartość sesji jeśli to 5 to wyświetlamy strone ale z tego co przeczytałem w google taki sposób chyba nie jest bezpieczny i zastanawiam się nad alternatywą kombinuje już pare dni nad tym i powoli zaczynam się poddawać ;/ sciana.gif
Kshyhoo
Ja poznawałem sesje na tym artykule. A bezpieczeństwo zależy, jak z tego skorzystasz...
marcio
Cytat(marcus753 @ 8.06.2009, 13:43:36 ) *
tak szukałem informacji na temat paneli logowania i sesji ale znalazłem tylko jakieś bzdety albo gotowe panele...
moja znajomość techniczna pozwala mi na zrobienie panelu logowania ale zastanawiam się co umieścić w sesjach ?
na samym początku miałem taki pomysł w pliku index.php wpisujemy hasło i login w pliku logowanie.php sprawdzamy czy login jest w bazie i czy hasło sie zgadza jeśli tak to do sesji przypisujemy wartość np. 5 i przechodzimy do pliku zabezpieczone.php tutaj sprawdzamy wartość sesji jeśli to 5 to wyświetlamy strone ale z tego co przeczytałem w google taki sposób chyba nie jest bezpieczny i zastanawiam się nad alternatywą kombinuje już pare dni nad tym i powoli zaczynam się poddawać ;/ sciana.gif

Co ty za glupoty piszesz znalazles tylko jakies bzdety albo gotowe panele a co innego chcialbys znalesc jak szukac nie potrafisz:
http://forum.php.pl/index.php?act=Search&a...te=%2Blogowanie

Masz ponad 50 stron tematow bys tak ruszyl dupe poszukal pokazal co wykodziles powiedzial w czym masz dylemat to bysmy ci pomogli jest chyba 10 tematow dziennie na temat sesji,logowania,rejestracji i powoli sie to robi monotonne i nudne.

Takze wez poszukaj i nie pisz glupot tam masz wszystko opisane razem z zabezpieczeniami jest zreszta pelno klas ktora widnieja na lamach strony ostatnio nawet ja jedna podawalem by zobaczyc czy jest good.
Maveral
Jeśli chodzi o logowanie, to wystarczą w zasadzie takie standardowe zabezpieczenia, które znajdziesz w skryptach na tym forum. W tej kwestii nie wymyślisz już niczego, czego nie było wcześniej, więc szukaj w odpowiednich tematach smile.gif
marcus753
dzięki panowie strona podana przez Kshyhoo rozjaśniła troche moją znajomość sesji mam jeszcze takie małe pytanie rozumiem że jest możliwość zobaczenia zawartości sesji natomiast dlatego nie powinno się tak umieszczać haseł itp. ale czy jest możliwość zmiany wartości sesji z zewnątrz ?
marcio
Nom bawiac sie chodzby livehhtpheaders da rade sa tez inne sniffery/spoofery napewno.

Co do tego arta to go nawet nie czytaj spojrz na date 2002 rok uzywane php4 i teraz sesje inaczej dzialala sa bezpieczniejsze mozesz co najzyjwej poczytac z czym to sie je i tyle.
marcus753
no to zabieram się za analizowanie informacji na tym forum może coś znajde eh ;/
marcio
Cytat(marcus753 @ 8.06.2009, 14:44:38 ) *
no to zabieram się za analizowanie informacji na tym forum może coś znajde eh ;/

Widac jakie masz checi nie ma to jak ktos daje gotowe na tacy prawda??

Niestety programowanie to takie hobby gdzie trzeba radzic sobie samemu jakos przynajmniej w dostatecznym stopniu i ruszac czesto makuwa tez trzeba.

Ogolnie jest to najwieksze forum o php w PL takze wiesz.....
marcus753
ja dopiero ucze się o php widziałem posty gdzie ludzie poprostu pytali sie o jakiś kurs na temat sesji (na tym forum) i dostawali strony z kursami (gotowe na tacy) a ja pytając się o jakieś metody zabezpieczenia sesji czy też projektowania panelu logowania tak aby w sesjach nie były umieszczane kluczowe dane dostaje po głowie że mi się nie chce szukać chyba napisze skrypt tak jak myślałem wcześniej i się zapytam o metody zabezpieczenia go może wtedy ktoś mi pomoże...
marcio
Cytat
a ja pytając się o jakieś metody zabezpieczenia sesji czy też projektowania panelu logowania tak aby w sesjach nie były umieszczane kluczowe dane dostaje po głowie że mi się nie chce szukać chyba napisze skrypt tak jak myślałem wcześniej i się zapytam o metody zabezpieczenia go może wtedy ktoś mi pomoże...

Na to samo wychodzi w tych kursach zreszta sa opisane podstawowe zabezpieczenia to raz.

A dwa jak napiszesz to chetnie pomoge.

Trzy jak przy 60 stronach na temat logowania znalazles tylko linki do kursow to gratuluje......
marcus753
marcio prosze bardzo trzymam za słowo że teraz mi pomożesz winksmiley.jpg

strona.html
  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  4.  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7.    
  8.    <head>
  9.  
  10.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  11. <title>strona.php</title>
  12.    
  13.    </head>
  14.  
  15.    <body>
  16.  
  17.  
  18.    <form action="logowanie.php" method="POST">
  19.    
  20.    Login: <input name="login" /><br>
  21.    Hasło: <input name="haslo" /><br>
  22.    
  23.    <input type="submit" value="wyślij" />
  24.    
  25.    </form>
  26.  
  27.  
  28.    </body>
  29. </html>


logowanie.php
  1. <?php
  2.  
  3. $polaczenie = @mysql_connect('localhost', 'uzytkownik', 'haslo')
  4. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  5. echo "Udało się połączyć z serwerem!<br />";
  6.  
  7. $baza = @mysql_select_db('gebala_uzytkownicy', $polaczenie)
  8.  
  9. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  10.  
  11. echo "Udało się połączyć z bazą dancych!";
  12.  
  13. $zapytanie='SELECT login,haslo FROM uzytkownicy';
  14. $wynik= mysql_query($zapytanie,$polaczenie);    
  15.    
  16.    
  17. while ($rekord = mysql_fetch_assoc($wynik)){
  18.  
  19.    $login1 = $rekord['login'];
  20.    $haslo1 = $rekord['haslo'];
  21.    $login2 = $_POST['login'];
  22.    $haslo2 = $_POST['haslo'];
  23.  
  24.  
  25.    if (($login1 === $login2) AND ($haslo1 === $haslo2)){
  26.  
  27.    $_SESSION['user'] ="zalogowany";}}
  28.  
  29.  
  30.  
  31. mysql_close($polaczenie);
  32.  
  33. echo"<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=zabezpieczona.php\">";
  34. ?>


zabezpieczona.php

  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  4.  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7.    
  8.    <head>
  9.  
  10.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  11. <title></title>
  12.    
  13.    </head>
  14.  
  15.    <body>
  16.  
  17.    
  18.    <?php
  19. if     (($_SESSION['user']) === "zalogowany"){
  20.    echo"jesteś zalogowany !";
  21. }
  22.    else{
  23. echo"nie autoryzowany dostęp !";
  24. }
  25. ?>
  26.  
  27.  
  28.  
  29.    </body>
  30. </html>


Prosty skrypt logowania jak zrobić aby był bezpieczniejszy ? w tym przypadku jeśli ktoś zdoła zmienić wartość sesji user na zalogowany ma praktycznie nie ograniczony dostęp do "ukrytej" części strony...
marcio
To zamien na:
  1. <?php
  2. $zapytanie='SELECT login,haslo FROM uzytkownicy';
  3. $wynik= mysql_query($zapytanie,$polaczenie);    
  4.    
  5.    
  6. while ($rekord = mysql_fetch_assoc($wynik)){
  7.  
  8.    $login1 = $rekord['login'];
  9.    $haslo1 = $rekord['haslo'];
  10.    $login2 = $_POST['login'];
  11.    $haslo2 = $_POST['haslo'];
  12.  
  13.  
  14.    if (($login1 === $login2) AND ($haslo1 === $haslo2)){
  15.  
  16.    $_SESSION['user'] ="zalogowany";}}
  17. ?>

Na to:
  1. <?php
  2. $zapytanie='SELECT login,haslo FROM uzytkownicy where login = "'.mysql_real_escape_string($_POST['login']).'" limit 1';
  3. $wynik= mysql_query($zapytanie,$polaczenie);    
  4. $tab = mysql_fetch_assoc($wynik);
  5.  
  6.  
  7.    if(($_POST['login'] === $tab['login']) && ($_POST['haslo'] === $tab['haslo'])) $_SESSION['user'] ="zalogowany";
  8.  
  9.  else echo('Podano zle dane<Br>');
  10. ?>

Bo byla zbedna petla while() i do tego glupio dane sprawdzales.

Potem w sesji nigdy nie trzymaj poufnych danych jak haslo np.
Haslo w bazie trzymaj zakodowane za pomoca md5()/sha1() polecam to drugie i przy porownywaniu dajesz:
  1. <?php
  2. if(($_POST['login'] === $tab['login']) && (md5($_POST['haslo']) === $tab['haslo'])) $_SESSION['user'] ="zalogowany";
  3. ?>

A haslo w bazie danych jest zakodowane za pomoca md5().

Potem dawaj sobie zawsze sesje za jakims unikalnym kodem dla kazdego user'a u sprawdzaj czy kod z sesji zgadza sie z tym od user'a wtedy nawet jak bedzie chcial kombinowac z sesja to nic nie zdziala bo bedzie musial podac kod uzytkownika ktory jest losowy np taki:
  1. <?php
  2. $code = substr(md5(time()), 10, 20);
  3. ?>

I przy dodawaniu user'a do kulumny code wsadzasz wygenerowany ciag a przy logowaniu tworzysz dodatkowa sesje z tym ciagiem ktory wyciagniesz z bazy.

A na stronie zabezpieczona.php robisz taK:
  1. <?php
  2. $zap = mysql_query('SELECT code FROM uzytkownicy where code = "'.mysql_real_escape_string($_SESSION['sesja_z_kodem']).'"');
  3.  
  4. if(mysql_num_rows($zap) > 0 && $_SESSION['user'] == 'zalogowany') {
  5.  
  6. //zalogowany
  7.  
  8. }
  9.  
  10. else echo('Cos jest zle tongue.gif');
  11. ?>


Cytat
Prosty skrypt logowania jak zrobić aby był bezpieczniejszy ? w tym przypadku jeśli ktoś zdoła zmienić wartość sesji user na zalogowany ma praktycznie nie ograniczony dostęp do "ukrytej" części strony...

Jak zrobisz tak jak ci powiedzialem to bez sql inj. chyba ze ty mu podasz code user'a nic nie zdziala.

Oczywiscie poczytaj jeszcze od session fixation,hijacker etc ale mysle ze to zbedne bawienie sie sprawdzac ip,agent'a i referer'a
marcus753
rozumiem że chciałeś abym ja sam trochę się pomęczył niż dostał gotowe rozwiązanie na tacy ale czy nie można było tak od razu ? winksmiley.jpg
Oczywiście wielkie dzięki za pomoc i poświęcony czas

Studiuję ten twój kod i zastanawiam się nad nim on jest automatycznie generowany podczas rejestracji użytkownika i zapisywany do bazy czy podczas logowania użytkownika ?
i rozumiem że po udanym zalogowaniu wczytujemy ten kod do zmiennej i potem już na zabezpieczonej stronie go porównujemy czy się zgadza z tym w bazie dobrze rozumiem ?
a jeżeli tak to czy nie ma możliwości zobaczenia, przechwycenia go gdy znajduje się w sesji ? hmm
marcio
Cytat
Studiuję ten twój kod i zastanawiam się nad nim on jest automatycznie generowany podczas rejestracji użytkownika i zapisywany do bazy czy podczas logowania użytkownika ?
i rozumiem że po udanym zalogowaniu wczytujemy ten kod do zmiennej i potem już na zabezpieczonej stronie go porównujemy czy się zgadza z tym w bazie dobrze rozumiem ?
a jeżeli tak to czy nie ma możliwości zobaczenia, przechwycenia go gdy znajduje się w sesji ? hmm

Ja to robie 1 przy rejestracji poniewaz nie mam danych z pentagonu na stronie jednak jesli chcesz miec wieksze bezpieczenstwo to dodaj pierwwszy kod user'owi podczac rejestracji a przy kazdym logowaniu jesli dane sie zgadzaja robisz update z nowym kodem.

Po zalogowaniu kod wczytujesz do sesji kodujac go np glupim rot13 wtedy gdy ktos znajdzie nawet xss'a na twojej stronie moze sie nie domysli ze kod dodatkowo jest kodowany za pomoca rot13 rozumiesz a jak nie to trzymaj w jawnej postaci tylko staraj sie nie miec xss/csrf na stronie i wtedy bedzie good.
POtem kod z sesji porownujesz z tym w bazie.

Mozliwosc przechwycenia ma ale jesli zmieniasz kod user'a za kazdym logowaniem to h4xor bedzie sie cieszyl sesja do wylogowania i poten lipa do tego jesli masz mozliwsco zmiany hasla dla zalogowanego user'a to przez zmiana hasla pytaj o stare wtedy napastnik naprawde nic nie zdziala, nom prawie nic tongue.gif.

Jesli bedziesz robil to raz przy rejestracji wtedy jesli uzyska kod user'a to jest lipa tongue.gif.
zientek18
Bardzo ciekawy temat, przeczytałem wszystko.
Pozwolę się dołączyć do tematu.
Właśnie próbuję stworzyć przycisk wylogowania i zrobiłem to tak:

dodatkowa linijka w pliku zabezpieczony.php :

  1. <?php
  2. echo '<a href="wyloguj.php">wyloguj</a>';
  3. ?>


cala zawartosc pliku wyloguj.php:

  1. <?php
  2. if ($_SESSION['user'] == "zalogowany") {
  3. }
  4. echo 'wylogowales sie';
  5. ?>


Niestety nie działa, wyświetla się napis, że zostałeś wylogowany, ale niestety po wejściu w plik zabezpieczony.php wszystko jest widoczne.

Czy ktoś może mnie nakierować ?
Robert007
sprawdź czy warunek na wylogowanie jest dobry czyli musisz wrzucić echo pod warunkiem a jak się nie wyświetli nick to znaczy że warunek masz źle winksmiley.jpg
bełdzio
try
  1. <?php
  2. $_SESSION = array( );
  3. setcookie ( session_name(), '', time( ) - 3600 );
  4. ?>
zientek18
Cytat(Robert007 @ 1.07.2009, 15:20:00 ) *
sprawdź czy warunek na wylogowanie jest dobry czyli musisz wrzucić echo pod warunkiem a jak się nie wyświetli nick to znaczy że warunek masz źle winksmiley.jpg


Więc napisałem coś takiego zgodnię z twoją radę:
  1. <?php
  2. if ($_SESSION['user'] == "zalogowany") {
  3. echo 'Wylogowales sie';
  4. }
  5.  
  6. else {
  7.    echo 'Nie udalo sie wylogowac';
  8. }
  9. ?>


I otrzymuje ze nie udalo sie wylogowac, wiec może jakas jeszcze podpowiedz ?


Cytat(bełdzio @ 1.07.2009, 15:41:55 ) *
try
  1. <?php
  2. $_SESSION = array( );
  3. setcookie ( session_name(), '', time( ) - 3600 );
  4. ?>


Probowałem, ale co to oznacza ? Rozbijasz sesje na tablicę i wrzucasz ją do cookie ? Nic z tego nie rozumiem
bełdzio
niszczysz sesje + kasujesz ciacho z id sesji
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.