• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
959 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 (606,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 Guru (606,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 Guru (606,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,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 (606,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,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 (606,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,390 p.)

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

komentarz 27 czerwca 2015 przez Comandeer Guru (606,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ź 575 wizyt
pytanie zadane 12 kwietnia 2019 w PHP przez Sinq Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 850 wizyt
pytanie zadane 1 grudnia 2015 w PHP przez migacz100 Mądrala (5,410 p.)
0 głosów
2 odpowiedzi 1,130 wizyt

93,185 zapytań

142,199 odpowiedzi

322,008 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1365p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...