Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ochrona przed przechwyceniem i ustawieniem sesji?
Forum PHP.pl > Forum > PHP
xajart
Moje pytanie dotyczy się tematu. Jak najlepiej ochronić mechanizm sesji?

Całe dzień dzisiaj szukam po necie materiałów na ten temat i z tych istotniejszych znalazłem coś takiego

1) Ochrona przed ustawieniem sesji

Kod
ini_set('session.ude_only_cookies', true);
session_start();
if (!isset($_SESSION['generated']) || $_SESSION['generated'] < (time()-30)) {
session_regenerate_id();
$_SESSION['generated']=time();
}


Jak dobrze rozumie to co 30 sekund jest generowany nowy PHPSESSID - ten sposób ma utrudniać ustawienie sesji. Ale nie dokońca rozumie cel tego. Rozumie że kiedy zmienia sie ID Sesji, wówczas parametry które są w tej sesji zapisane, komuś z zewnątrz utrudni to dostęp do nich. 

2) Ochrona przed przechwyceniem sesji

Na ten temat wyczytałem że dobrze jest stosować wygenerowane tokeny, ale nie bardzo wiem w jaki sposób wygenerować ten unikalny token i jak to rozwiązać. Rozumie że kiedy np użytkowni loguje się do systemu, skrypt po przejściu przez walidator danych i weryfikacje użytkownika, generuje token, który z kolei ma być dołańczany do wszystkich linków np po przez
Kod
outpu_add_rewrite_var('token', $token);

A dodatkowo w formularzach zamieszczać ten token jako ukryty i potem sprawdzać jego poprawność. 

Tylko nasuwają mi się tutaj pytania w stylu. Jak wygenerować unikalny token? taki który zmieniał by się po określonym czasie i jak przypuszczalnie długi ten czas ma być 1 dzień, tydzień, a może miesiąć. Druga kwestia dotyczy właśnie uniklaności tego tokena, by był genrowany nowy kiedy użytkownik się wyloguje a następnie ponownie zaloguje. Myslałem nad różnymi kwestiami. Jeżeli chciałbym aby np token był generowany raz na dzień, to mógłbym przypuszczalnie zastosować generowanie na podstawie IP (ale jeżeli z systemu będą korzystać osoby w jakiejś wewnętrznej sieci, to nie ma to sensu). Generowanie po nazwie użytkownika, ale kiedy użytkownik się wyloguje i ponownie zaloguje to dalej będzie miał taki sam token. W jaki sposób rozwiązać skrypt generujacy token? Jeżeli będzie generowany np co określony czas nowy, to będzie użytkownika zalogowanego wyrzucać z systemu, wobec tego czy zapisywać go w cookisach? ale ktoś może mieć wyłączone cookisy więc zostają tylko sesje, albo baza danych. Gdzieś czytałem o "tablicy routingu" ale nie bardzo wiem o co z tym chodzi. 


A może w jakiś inny sposób zabezpieczać sesje ?

marcio
Wystarczy sprawdzanie np ip i przegladarki.

Za kazdym logowaniem tworzyc unikalne id dla user'a i ustawic dosyc krotki  czas zycia sesji.
Do tego mozesz jeszcze zmienic domyslny katalog do trzymania sesji, lub napisac wlasny handler oparty na bazie.
erix
A czytasz czasem przyklejone wątki?

Temat: Bezpieczestwo skryptw PHP
xajart
Cytat(marcio @ 21.11.2009, 02:02:55 ) *
Wystarczy sprawdzanie np ip i przegladarki.

Nad tym myślałem, ale jeżeli z systemu będą korzystać osoby wewnatrz firmy, gdzie zewnętrzny IP mają wszyscy taki sam, a oprogramowanie jest ustandaryzowane to każdy na swoim kompie będzie miał to samo IP i taką samą przeglądarkę. Więc może dojśc do sytuacji że admin będzie miał ten sam token co zwykły użytkownik firmy. 



 
Cytat(erix @ 21.11.2009, 10:28:59 ) *
A czytasz czasem przyklejone wątki?
Temat: Bezpieczestwo skryptw PHP



Ten wątek przeoczyłem pewnie dlatego że mowa o sesjach jest dopiero gdzieś przy końcu, ale przeczytałem go od początku i jest ogólnie opisany o tym co wszędzie a nie ma dogłębnego opisu jak to najlepiej rozwiażać. Ale skoro istnieje taki wątek to by tego nie przedłużać, opiszę tam to co mnie interesuje, może ktoś odpowie.
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.