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();
}
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 ?