• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP bezpieczeństwo danych logowania oraz danych

VPS Starter Arubacloud
+1 głos
816 wizyt
pytanie zadane 27 czerwca 2015 w PHP przez kamil_1996 Nowicjusz (130 p.)
Witam mam pytanie odnośnie programowania PHP. Jestem tutaj bo mam kilka pytań po tym jak obejrzałem kurs php odcinek 2 ( https://www.youtube.com/watch?v=Pp578w7C9hE ). Otóż Pan Mirosław mówił o bezpieczeństwie i ryzyku w stosowaniu SESSION. Z tego co rozumiem najlepiej przechowywać tam tylko id, ale w takim wypadku jak wyjąć reszte danych? Tzn. drewno, kamień, dni premium itp. Chodzi mi o dokładnie ten fragment skryptu w pliku gra.php(połączenie z bazą danych było w innym pliku)

<?php

    echo "<p>Witaj ".$_SESSION['user'].'! [ <a href="logout.php">Wyloguj się!</a> ]</p>';
    echo "<p><b>Drewno</b>: ".$_SESSION['drewno'];
    echo " | <b>Kamień</b>: ".$_SESSION['kamien'];
    echo " | <b>Zboże</b>: ".$_SESSION['zboze']."</p>";
    
    echo "<p><b>E-mail</b>: ".$_SESSION['email'];
    echo "<br /><b>Dni premium</b>: ".$_SESSION['dnipremium']."</p>";
    
?>

Jaki zatem jest inny bezpieczniejszy sposób na wyjmowanie danych z bazy danych?

3 odpowiedzi

+1 głos
odpowiedź 27 czerwca 2015 przez Comandeer Guru (599,730 p.)

Jeśli chodzi o samą ilość kamienia czy zboża to raczej nie są to aż tak wrażliwe dane, żeby musieć się tym martwić. Natomiast w sesji nie należy trzymać takich danych jak hasło. To powinno być w bazie i używane tylko do sprawdzania poprawności logowania - i NIGDZIE indziej.

Natomiast bardziej bym się martwił trzymaniem czegokolwiek po stronie klienta. Tam powinno być tylko id sesji, które będzie sprawdzane po stronie serwera. Tyle.

komentarz 27 czerwca 2015 przez kamil_1996 Nowicjusz (130 p.)
Dzięki za odpowiedź. A mam jeszcze pytanie, czy id sesji musze ustawiać ja czy jest ono przyznawane automatycznie? Jeśli automatycznie, to zostawić tak czy lepiej robić to samodzielnie?  Przedstawisz przykładowy kod jak sprawdzić id sesji? Ewentualnie jak ustawić ID sesji, jeśli nie jest ono automatyczne. Dziękuję i pozdrawiam.
komentarz 27 czerwca 2015 przez Comandeer Guru (599,730 p.)

W gruncie rzeczy w wypadku stosowania systemu sesji wbudowanego w PHP warto stosować dwa polecenia:

session_start();
session_regenerate_id(true);

To zapewni dość duże bezpieczeństwo. Dodatkowo można zapisać w sesji info o przeglądarce usera i sprawdzać czy się zgadza między żądaniami.

Warto też pogrzebać w php.ini i ustawić dla ciasteczka sesji flagę http_only, co uniemożliwi podejrzenie go w JS. Można to też zrobić tą funkcją: http://php.net/manual/en/function.session-set-cookie-params.php

Jeśli korzystasz z wbudowanych sesji to ID jest sprawdzane z automatu, ale dodatkowe sprawdzania (np. IP, przeglądarka itp.) musisz już zrobić sam.

komentarz 27 czerwca 2015 przez Comandeer Guru (599,730 p.)
Możesz sobie w bazie zapisywać jego preferencje i po zalogowaniu wrzucić je do sesji i na podstawie nich generować stronę
komentarz 5 sierpnia 2015 przez makoso Mądrala (7,380 p.)

Takie moje pytanko odnośnie tego co czytam postanowiłem dodać sobie sprawdzanie ip do regenerate i takie pytanko czy taki to podwyższa bezpieczeństwo? :)
 

$sesion = Session::getInstance();
if(empty($sesion->ip)) {
    $sesion->ip = $_SERVER['REMOTE_ADDR'];
}
elseif(!empty($sesion->ip)) {
    if ($sesion->ip == $_SERVER['REMOTE_ADDR']) {
        session_regenerate_id(true);
    } else {
        $sesion->destroy();
    }
}

 

komentarz 5 sierpnia 2015 przez Comandeer Guru (599,730 p.)
Jak dla mnie tak.
0 głosów
odpowiedź 6 października 2015 przez Pscoolka Nowicjusz (240 p.)
Dołączę się już tutaj do pytania kolegi, a raczj rozwinę temat. Czy zaufanie użytkownikowi i uwierzytelnianie go za pomocą samego loginu jest bezpieczne? Nie ma możliwości takiej, że użytkownik logując się na swoje konto znajdzie sposób i podmieni zmienną ze swoim loginem na login innego gracza, a tym samym dostanie się na jego konto? Może warto przechowywać login oraz numer ID i przy każdym przejściu je porównywać?
komentarz 6 października 2015 przez Boshi VIP (100,240 p.)
A dlaczego nie hashowane hasło?
komentarz 6 października 2015 przez Pscoolka Nowicjusz (240 p.)
A bezpieczniej? Jeśli tak to spoko. Czyli za każdym razem (na każdej stronie dostępnej dla zalogowanego) pobieramy hasło z bazy (które już jest tam zahashowane) dla użytkownika o loginie  z sesji i porównujemy z hashem hasła z sesji, który utworzyliśmy podczas logowania tegoż uzytkownika. I nic więcej nie jest nam potrzebne do sesji, aby móc być zalogowanym? A dajmy na to podane w przykłądowym programie surowce. Nie powinniśmy ich każdorazowo pobierać z bazy?
komentarz 6 października 2015 przez Boshi VIP (100,240 p.)
Powinniśmy a każdy user ma swój stan surowców. W sesji nie zapisujesz nigdy hasła.  Porównujesz hash z bazy z hashem wpisanym przez użytkownika w haśle.
komentarz 6 października 2015 przez writen Nałogowiec (29,060 p.)
Tak wszystkie dane powinny być pobierane każdorazowo z bazy. Stan tych danych w końcu może się zmieniać, więc zapisywanie ich w sesji mijało by się z celem.
–2 głosów
odpowiedź 27 czerwca 2015 przez krecik1334 Maniak (58,390 p.)
Może $_POST? Nie wiem ale może to być bezpieczniejsze.
komentarz 27 czerwca 2015 przez Comandeer Guru (599,730 p.)

$_POST służy do przesyłu danych na serwer, nie do trzymania danych między żądaniami. No i nie jest bezpieczniejsze dopóki nie mamy na serwerze SSL.

komentarz 27 czerwca 2015 przez krecik1334 Maniak (58,390 p.)

Z tego co słyszę to nic nie jest bezpieczne. Nawet na localhoście laugh

komentarz 27 czerwca 2015 przez Comandeer Guru (599,730 p.)
SSL nie da podsłuchać przesyłanych do serwera danych, więc o tyle dobrze. Ale tak - nic nie jest w 100% bezpieczne. A zwłaszcza źle skonfigurowany localhost ;)

Podobne pytania

0 głosów
1 odpowiedź 386 wizyt
pytanie zadane 12 kwietnia 2019 w PHP przez Sinq Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 539 wizyt
pytanie zadane 1 grudnia 2015 w PHP przez migacz100 Mądrala (5,410 p.)
0 głosów
2 odpowiedzi 696 wizyt

92,452 zapytań

141,262 odpowiedzi

319,076 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...