Cytat(kilofmar @ 12.06.2013, 18:05:07 )

Witam.
Mam taki prosty system logowania w którym ustawiam czas bezczynności po jakim użytkownik automatycznie zostanie wylogowany.
I problem polega na tym że w niektórych przypadkach wylogowuje użytkowników dużo wcześniej, nie wiem od czego to zależy.
Czas sesji mam ustawiony na około 25min a czasem wylogowuje już po 5-10min
kod który za każdym przeładowaniem jest wywoływany
$CzasSessi= intval($config['czas_sessi']); //25min
if (isset($_SESSION['czas']) and
$_SESSION['czas']+60
*$CzasSessi<time
()) { // 30 minut }else {
$_SESSION['czas'] = time(); }
if (isset($_SESSION['zalogowany']) && $_SESSION['zalogowany']) { //dostęp po zalogowaniu
...
}else{
//powrót do strony logowania
}
Od logowania
$query = sprintf("SELECT * FROM `uzytkownicy` WHERE `login` = '%s' AND `haslo` = '%s' LIMIT 0,1", $Username, $Pass); $result = $SQL->Query($query);
if ($SQL->Rows($result) > 0) {
$_SESSION['zalogowany'] = true;
}
W ogóle co byście poradzili aby zwiększyć bezpieczeństwo?
Odnośnie zapytań do bazy danych to:
1. Zamiast addslasches używaj funkcji preg_match i sam ustaw jakie znaki moga sie pojawiac, ja tez kombinowałem jak się dało i wyszło że najbezpieczniej filtrować wszystko za pomocą preg_match.
2. Używaj biblioteki PDO do bazy danych
Przy czym jeżeli opierasz logowanie na sesjach to warto by troche zmodyfikowac:
if ($_SESSION['zalogowany'] == true AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) {
Przy logowaniu:
if ($SQL->Rows($result) > 0) {
$_SESSION['zalogowany'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
Jednak zabezpieczenie troche slabiutkie i to nawet bardzo. Powinienes dac wiecej parametrow do walidacji. Takich jak login, haslo, id sesji, IP, przegladarka itd. Jak sesja "zalogowana" jest true to nastepnie walidacja reszty danych i porownywanie z baza danych jak wszystko okej to dopiero klient moze sobie ogladac co tam chcial.
U mnie wyglada to tak ze jezeli wszystkie wymagane sesje istnieja to zaczyna sprawdzac.
1. czy jest taki login?
2. czy haslo jest prawidlowe?
3. czy ip sie zgadza?*
4. czy przegladarka sie zgadza?*
*Podczas logowania, jezeli wpisany login i haslo jest prawidlowe to w bazie danych zapisuje aktualne IP i nastepnie porownywane jest IP klienta z tym co jest w bazie. Jak ktos przejmie sesje a bedzie uzywal innej przeglarki lub ma inne ip to i tak go wyloguje.
Mozna dac wiecej kryteriow, wszystko zalezy jak bardzo strona dla uzytkownika wymaga zabezpieczen. Hasla zabezpieczam przez dodanie ciagu znakow do hasla a nastepnie przez hashowanie SHA256. Zeby bylo bardziej "dziwnie" to w sesji haslo zapisuje tylko ciag 16 znakow z 32, "wycinam" srodek. Nastepnie dla porowania pobieram haslo z bazy, hashuje i sprawdzam czy srodkowe ciagi sie pokrywaja.
Sa rozne metody, im bardziej "wlasna" tym bezpieczniejsza