• 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

+1 głos
449 wizyt
pytanie zadane 27 czerwca 2015 w PHP, Symfony, Zend 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 Mentor (462,240 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 Mentor (462,240 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 Mentor (462,240 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,400 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 Mentor (462,240 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,660 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,660 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,200 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,910 p.)
Może $_POST? Nie wiem ale może to być bezpieczniejsze.
komentarz 27 czerwca 2015 przez Comandeer Mentor (462,240 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,910 p.)

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

komentarz 27 czerwca 2015 przez Comandeer Mentor (462,240 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ź 48 wizyt
pytanie zadane 12 kwietnia w PHP, Symfony, Zend przez Sinq Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 165 wizyt
0 głosów
1 odpowiedź 121 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

66,513 zapytań

113,278 odpowiedzi

239,907 komentarzy

46,647 pasjonatów

Przeglądających: 216
Pasjonatów: 19 Gości: 197

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...