Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zabezpieczenia przed podmianą sesji
Forum PHP.pl > Forum > PHP
jarmiar
Witam,

Jak można zabezpieczyć skrypt przez podmianą sesji (session poisoning) questionmark.gif


Proszę o porady, bo ostatnio jedna osoba weszła mi do panelu admina ;p
nospor
a skad wiesz ze to spowody dziury w sesji ci weszli do admina? Powodow moze byc multum. Jakiś konkretny powod by tak myslec?
jarmiar
gościu który to zrobił napisał do mnie na gg
Mlodycompany
daj kod. bez kodu ciezko powiedziec
jarmiar
ustawiam sobie zmienną sesyjną i potem sprawdzam czy ma określonbą wartość
leovandamon
Ja w skryptach zabezpieczam się tak:

Kod
<?php
// Session
session_start();

// Logs and user control
if(!isset($_SESSION['ip']) || empty($_SESSION['ip'])) {
    $line = '['.date('d.m.Y H:i:s').'] IP: '.$_SERVER['REMOTE_ADDR'].' SESSION: '.$_COOKIE["PHPSESSID"]."\n\t\t".$_SERVER['HTTP_USER_AGENT']."\n";
    $file = fopen('log.txt','a');
    if($file) {
        fwrite($file,$line);
        fclose($file);
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        $_SESSION['id'] = $_COOKIE['PHPSESSID'];
    }
}
if($_SESSION['ip']!==$_SESSION['ip'] || $_SESSION['id']!==$_COOKIE['PHPSESSID']) {
    session_unset(); session_regenerate_id();
}
?>


Kod sprawdza, czy jest to nowa sesja. Jeśli tak, zapisuje logi (data, IP usera, ID sesji i dane o przeglądarce do pliku log.txt.
Następnie sprawdza, czy IP usera zgadza się z IP zapisanym w sesji oraz ID sesji zgadza się z tym wysłanym w ciasteczku.
Jeśli coś jest nie tak, zmienia userowi identyfikator, a ten nawet nic nie zauważa.

Pozdrawiam,
Leo van Damon
jarmiar
i to rozwiązanie na pewno pomoze przed atakami zwiazanymi z podmiana sesji?questionmark.gif?
gino
Cytat(leovandamon @ 13.07.2008, 10:06:52 ) *
Następnie sprawdza, czy IP usera zgadza się z IP zapisanym w sesji oraz ID sesji zgadza się z tym wysłanym w ciasteczku.
Jeśli coś jest nie tak, zmienia userowi identyfikator, a ten nawet nic nie zauważa.

Pozdrawiam,
Leo van Damon


Jak na razie to Twój kod sprawdza czy IP w sesji jest identyczny z ... IP w sesji;

jarmiar przyłączam się do posu wyżej o jakiś kod do wglądu.

pozdrawiam gino
vokiel
może tak:
  1. <?php
  2. //wlasny mechanizm sesjii chroniący przed Session Hijacking, Session Fixation,
  3. if (!isset($_SESSION['kontrola_sesji'])){
  4. $_SESSION['kontrola_sesji'] = true;
  5. $_SESSION['adres_ip'] = $_SERVER['REMOTE_ADDR'];
  6. }
  7. if($_SESSION['adres_ip'] !== $_SERVER['REMOTE_ADDR']){
  8. echo 'Błąd: Próba przejęciaa sesji!';
  9. }
  10. ?>
jarmiar
a co z session poisoning?? co poradzic na to?
Shili
session_use_cookies_only, regeneracja id sesji, kontrola ip i zabezpieczenie przed wstrzyknięciem szkodliwego kodu w treści wysyłane przez userów powinno spokojnie, a nawet bardziej niż spokojnie wystarczyć.

Oczywiście, jeśli w grę nie wchodzi współdzielony katalog z sesjami. Zawsze można się jeszcze posiłkować session_save_path()
artega
Do tego może się jeszcze przydać ciastko zawierające identyfikator sesji z atrybutem HttpOnly.
jarmiar
Ok dzięki za rady smile.gif
zimi
Cytat
Oczywiście, jeśli w grę nie wchodzi współdzielony katalog z sesjami. Zawsze można się jeszcze posiłkować session_save_path()


mógłbyś konkretniej? a co gdy w grę wchodzi współdzielony katalog z sesjami?
Shili
Mogłabyś.

W przypadku takiej konfiguracji, gdzie konta mają dostęp do tych samych katalogów sesyjnych istnieje możliwość dokopania się do sesji z innego konta. W przypadku domyślnych ustawień serwera dochodzi do głosu także directory traversal, ale to trochę inna bajka.
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.