PHP Session Security

szavazat
125

Melyek irányelvek fenntartásáért felelős munkamenet-biztonsági PHP? Van információt az egész interneten, és ez az ideje, hogy minden landolt egy helyen!

A kérdést 02/08/2008 03:41
a forrás felhasználó
Más nyelveken...                            


13 válasz

szavazat
15

Egy iránymutatás hívni session_regenerate_id valahányszor egy munkamenet biztonsági szint változik. Ez segít megelőzni a munkamenet eltérítése.

Válaszolt 02/08/2008 03:43
a forrás felhasználó

szavazat
11

Azt hiszem, az egyik fő probléma (melynek megoldását a PHP 6) register_globals. Most az egyik standard módszerek használatával elkerülhető az register_globals, hogy használja a $_REQUEST, $_GETvagy $_POSTtömbök.

A „helyes” utat megtenni (például 5,2, bár ez egy kicsit bugos ott, de stabil, mint 6, amely hamarosan) keresztül szűrők .

Tehát ahelyett, hogy:

$username = $_POST["username"];

tennéd:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

vagy akár csak:

$username = filter_input(INPUT_POST, 'username');
Válaszolt 02/08/2008 03:55
a forrás felhasználó

szavazat
3

Ez elég triviális és kézenfekvő, de biztos, hogy session_destroy minden használat után. Ez nehéz lehet végrehajtani, ha a felhasználó nem jelentkezik ki explicit módon, így egy időzítő lehet állítani, hogy erre a célra.

Itt van egy jó bemutató a setTimer () és clearTimer ().

Válaszolt 02/08/2008 04:16
a forrás felhasználó

szavazat
3

A fő probléma a PHP munkamenetek és a biztonság (amellett munkamenet eltérítése) jön milyen környezetben vannak. Alapértelmezés PHP tárolja a munkamenet adatokat egy fájlt az operációs rendszer temp könyvtárba. Anélkül, hogy speciális gondolat vagy tervezési ez egy mindenki számára olvasható könyvtárban, így az összes munkamenet információ nyilvános, hogy bárki, aki hozzáfér a szerverhez.

Ami fenntartása ülések több szerverre. Ezen a ponton jobb lenne váltani PHP felhasználói kezelni üléseken, amikor arra kéri az előírt funkciók szifilisz (létrehozni, olvasni, frissítés, törlés) a session adat. Ezen a ponton lehet tárolni a munkamenet adatokat egy adatbázisban vagy memcache hasonló megoldás, hogy minden alkalmazás szerverek férhetnek hozzá az adatokhoz.

Tárolása saját ülések is előnyös lehet, ha egy megosztott szerveren, mert akkor ismét tárolja az adatbázisban, amit sokszor több ellenőrzése alatt a fájlrendszert.

Válaszolt 03/08/2008 14:14
a forrás felhasználó

szavazat
2

Azt nézd IP és User Agent, hogy ha változik

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
Válaszolt 04/08/2008 22:38
a forrás felhasználó

szavazat
5

Az IP-cím nem igazán a legjobb ötlet az én tapasztalatom. Például; irodámban két IP-címek szokni a terhelés függvényében, és folyamatosan használata során problémába ütközik az IP-címeket.

Ehelyett én döntött, tárolására az ülések külön adatbázisban a tartományok én szervereket. Így senki sem a fájlrendszer hozzáférést, hogy a session info. Ez nagyon segítőkész volt a phpBB előtt 3.0 (ők már ettől fix ezt), de ez még mindig egy jó ötlet, azt hiszem.

Válaszolt 06/08/2008 21:44
a forrás felhasználó

szavazat
2

Ha használja session_set_save_handler () beállíthatja saját munkamenet-kezelőt. Például te tárolja ülés az adatbázisban. Lásd a php.net megjegyzéseket példákat adatbázis munkamenet kezelő.

DB ülés is jó, ha több szerver egyébként ha használ fájl alapú ülés van szüksége lenne, hogy megbizonyosodjon arról, hogy minden webszerver hozzáfért ugyanazon a fájlrendszeren írni / olvasni a foglalkozásokon.

Válaszolt 09/08/2008 04:28
a forrás felhasználó

szavazat
88

Van egy pár dolog, hogy annak érdekében, hogy a munkamenet biztonságos:

  1. SSL használata esetén a felhasználók hitelesítésére vagy a teljesítő érzékeny műveleteket.
  2. Regenerálja a session id, amikor a biztonsági szint változások (mint a bejelentkezés). Akkor is regenerálják a session id minden kérést, ha akarja.
  3. Van ülés időtúllépés
  4. Ne használja regisztrálja globals
  5. Store a hitelesítési adatokat a szerveren. Azaz, ne küldjön részleteket, mint például a felhasználói nevét a cookie-t.
  6. Ellenőrizze az $_SERVER['HTTP_USER_AGENT']. Ez hozzáad egy kis akadályt munkamenet eltérítése. Azt is ellenőrizze az IP-címet. De ez gondot okoz a felhasználóknak, akik a változó IP-cím miatt terheléskiegyenlítés több internet kapcsolat tartozik (ez a helyzet a környezetünkben itt).
  7. Zárják le a hozzáférést a session fájlrendszert, vagy egyedi munkamenet kezelés
  8. Az érzékeny műveletek fontolóra szükségessé bejelentkezett felhasználók számára, hogy saját authenication részletei ismét
Válaszolt 11/08/2008 03:38
a forrás felhasználó

szavazat
2

Be kell, hogy legyen, hogy a munkamenet adatokat biztonságban vannak. Megnézi a php.ini vagy a phpinfo () megtalálja Önnek a munkamenet beállításait. _session.save_path_ megmondja, hogy hol vannak mentve.

Ellenőrizze az engedélyt a mappát, és a szülei. Meg nem nyilvánosak (/ tmp), vagy lesz elérhető más weboldalak a megosztott szerveren.

Feltételezve, hogy továbbra is szeretné használni php ülésén Beállíthatjuk php használható más mappát megváltoztatásával _session.save_path_ vagy menteni az adatokat az adatbázisba megváltoztatásával _session.save_handler_.

Lehet, hogy képes legyen meghatározni _session.save_path_ php.ini (néhány szolgáltató ezt lehetővé teszik), vagy Apache + mod_php, egy .htaccess fájlt a webhely gyökérkönyvtárába: php_value session.save_path "/home/example.com/html/session". Azt is beállíthatja, hogy futás alatt _session_save_path () _.

Ellenőrizze Chris Shiflett tutorial vagy Zend_Session_SaveHandler_DbTable beállításához és az alternatív munkamenet kezelő.

Válaszolt 18/08/2008 18:12
a forrás felhasználó

szavazat
9

Ez az ülés rögzítés papír nagyon jó mutatókat, ahol támadás jöhet. Lásd még a munkamenet rögzítés oldalt a Wikipedia .

Válaszolt 05/03/2009 23:33
a forrás felhasználó

szavazat
11

A két (vagy több) cent:

Van egy apró, de jó könyv ebben a témában: Essential PHP Security Chris Shiflett .

Alapvető PHP Security http://shiflett.org/images/essential-php-security-small.png

A honlapon a könyv meg fogja találni néhány érdekes kódpéldákat és minta fejezeteket.

Lehet használni a technikát a fent említett (IP & UserAgent) leírása itt található: Hogyan kerüljük el a személyazonosság-lopás

Válaszolt 06/04/2010 17:05
a forrás felhasználó

szavazat
3

Tudom a munkamenet fel, mint this-

a bejelentkező oldalra:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

(Kifejezés meghatározása a config oldal)

majd a fejléc, hogy az egész a többi az oldalon:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
Válaszolt 19/07/2011 22:40
a forrás felhasználó

szavazat
3

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

ekvivalens Apache hozzá fejléc:

X-XSS-Protection    1
Válaszolt 13/10/2011 03:40
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more