PHP Security Session

hlasů
125

Jaké jsou některé pokyny pro zachování odpovědného zabezpečení relace s PHP? Tam je informace o celém webu, a že je na čase to všechno dopadá na jednom místě!

Položena 02/08/2008 v 03:41
zdroj uživatelem
V jiných jazycích...                            


13 odpovědí

hlasů
88

Existuje několik věcí, které se s cílem udržet vaši relaci bezpečný:

  1. Při ověřování uživatelů nebo při provádění citlivých operací použít SSL.
  2. Regenerovat ID relace, když se změní úroveň zabezpečení (například přihlašování). Můžete dokonce regenerovat ID relace každý požadavek, pokud si budete přát.
  3. Mají relací oddechový čas
  4. Nepoužívejte registrovat globals
  5. Podrobnosti ověřování Store na serveru. To znamená, že neposílají informace, jako je uživatelské jméno v cookie.
  6. Zkontrolujte $_SERVER['HTTP_USER_AGENT']. To přidává malou překážku neoprávněným přístupem. Můžete se také podívat na IP adresu. Ale to způsobuje problémy pro uživatele, kteří se měnící IP adresy v důsledku zatížení balancuje na vícenásobné připojení k internetu atd (což je případ v našem prostředí zde).
  7. Uzamknout přístup k sezení v systému souborů nebo použít vlastní manipulaci relace
  8. Pro zvážit, zda přihlásit citlivé operace uživatelům opět poskytovat své authenication podrobnosti
Odpovězeno 11/08/2008 v 03:38
zdroj uživatelem

hlasů
15

Jeden vodítkem je zavolat session_regenerate_id pokaždé změny úrovně zabezpečení relace je. To pomáhá zabránit neoprávněným přístupem.

Odpovězeno 02/08/2008 v 03:43
zdroj uživatelem

hlasů
11

Mí dva (nebo více) centů:

  • Nikomu nevěř
  • Filtrovat vstup, uniknout výstup (cookie data relace jsou vaše vstupní příliš)
  • Vyhnout XSS (aby se vaše HTML dobře tvarované, se podívat na PHPTAL nebo HTMLPurifier )
  • Obrana v hloubce
  • Nevystavujte údaje

K dispozici je malá, ale dobrá kniha na toto téma: Essential PHP Security Chris Shiflett .

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

Na domovské stránce knihy najdete některé zajímavé příklady kódu a ukázkové kapitoly.

Můžete použít techniku výše (IP & agent uživatele) bylo uvedeno, zde popsaný: Jak se vyhnout krádeži identity

Odpovězeno 06/04/2010 v 17:05
zdroj uživatelem

hlasů
11

Myslím, že jedním z hlavních problémů (která se řeší v PHP 6) je register_globals. Právě teď jedním ze standardních metod používaných vyhnout register_globalsje použít $_REQUEST, $_GETnebo $_POSTpole.

Dále jen „správný“ způsob, jak to udělat (jako 5,2, i když je to tam trochu buggy, ale stabilní 6, která se již brzy) je přes filtry .

Takže místo:

$username = $_POST["username"];

byste udělali:

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

nebo dokonce jen:

$username = filter_input(INPUT_POST, 'username');
Odpovězeno 02/08/2008 v 03:55
zdroj uživatelem

hlasů
9

Tato fixace zasedání papír má velmi dobré ukazatele, kde útok může přijít. Viz také relace fixační stránku na Wikipedii .

Odpovězeno 05/03/2009 v 23:33
zdroj uživatelem

hlasů
5

S použitím IP adresy není opravdu nejlepší nápad, podle mých zkušeností. Například; můj úřad má dvě IP adresy, které si zvyknout v závislosti na zatížení a neustále běžet na problémy s použitím IP adresy.

Místo toho jsem se rozhodl pro ukládání relace v samostatné databázi pro doménu na svých serverech. Tímto způsobem se nikdo na souborovém systému má přístup k této informace relace. To bylo opravdu užitečné, s phpBB než 3,0 (oni už od fixní to), ale je to stále dobrý nápad myslím.

Odpovězeno 06/08/2008 v 21:44
zdroj uživatelem

hlasů
3

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

eq Apache přidat hlavičku:

X-XSS-Protection    1
Odpovězeno 13/10/2011 v 03:40
zdroj uživatelem

hlasů
3

Dal jsem své relace se jako tohle

Na přihlašovací stránce:

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

(Výraz je definován v konfiguračním stránku)

pak na hlavičku, která je po zbytek webu:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
Odpovězeno 19/07/2011 v 22:40
zdroj uživatelem

hlasů
3

Hlavní problém s PHP relací a zabezpečení (kromě neoprávněným přístupem) je dodáván s jakém prostředí jste. Ve výchozím nastavení PHP obchodech dat relace v souboru v adresáři temp OS je. Bez zvláštního myšlení a plánování je to svět čitelný adresář, takže všechny vaše informace o relaci je veřejně dostupné všem uživatelům s přístupem k serveru.

Pro udržení relací přes více serverů. V tomto bodě by bylo lepší přejít PHP uživatelských manipulováno sezení, kde se volá své poskytované funkce CRUD (vytvářet, číst, aktualizovat, mazat) dat relace. V tomto okamžiku byste mohli ukládat informace o relaci v databázi nebo memcache jako řešení tak, aby všechny aplikační servery mají přístup k těmto údajům.

Uložení vlastní relace může být výhodné, pokud jste na sdíleném serveru, protože to vám umožní uložit do databáze, která často krát mít větší kontrolu nad tehdejším souborového systému.

Odpovězeno 03/08/2008 v 14:14
zdroj uživatelem

hlasů
3

To je docela triviální a samozřejmé, ale být jisti, session_destroy po každém použití. To může být obtížné provádět v případě, že uživatel není explicitně odhlásit, takže časovač lze nastavit, jak toho dosáhnout.

Zde je dobrý návod na SetTimer () a clearTimer ().

Odpovězeno 02/08/2008 v 04:16
zdroj uživatelem

hlasů
2

Musíte si být jisti, že data relace jsou v bezpečí. Při pohledu na váš php.ini nebo použitím phpinfo (), můžete si našel nastavení relace. _session.save_path_ vám řekne, kde jsou uloženy.

Zkontrolujte oprávnění složky a jejích rodičů. To by nemělo být veřejné (/ tmp), nebo mohou být přístupné z jiných webů na vašem sdílený server.

Za předpokladu, že si přesto chcete používat PHP relace můžete nastavit php použít jinou složku změnou _session.save_path_ nebo uložit data v databázi změnou _session.save_handler_.

Byste měli být schopni nastavit _session.save_path_ v php.ini (někteří poskytovatelé ji povolit) nebo apache + mod_php, v .htaccess souboru v kořenové složce webu: php_value session.save_path "/home/example.com/html/session". Můžete také nastavit v době spuštění s _session_save_path () _.

Zkontrolujte, Chris Shiflett je výukový program nebo Zend_Session_SaveHandler_DbTable nastavit a alternativní popisovač relace.

Odpovězeno 18/08/2008 v 18:12
zdroj uživatelem

hlasů
2

Máte-li použít session_set_save_handler () si můžete nastavit vlastní popisovač relace. Například byste mohli ukládat relace v databázi. Odkazují na php.net připomínky pro příklady psovoda databázové relace.

DB relace jsou také dobré, pokud máte více serverů jinak, pokud používáte soubor založený sezení, které bude potřebovat, aby se ujistil, že každý webserver měl přístup ke stejným souborovým systémem pro čtení / zápis relace.

Odpovězeno 09/08/2008 v 04:28
zdroj uživatelem

hlasů
2

Chtěl bych zjistit jak IP a uživatelského agenta, aby zjistili, zda se změní

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
Odpovězeno 04/08/2008 v 22:38
zdroj uživatelem

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