PHP oturumları yönetmek için doğru yolu?

4 Cevap php

I'm currently setting up an authentication system. My current layout is to get his email from the $_POST, md5 his password, and check the database against his email and his password. If it matches, I use session_start, and I start storing data in the $_SESSION variable, like so:

 $_SESSION['uid'] = $uid;
 $_SESSION['first_name'] = $first_name;

Ve web sitesinin her sayfasında, ben basit bir kontrol ve preform olur

isset($_SESSION['uid']);

değilse eğer, sayfayı yüklemek, indeks sayfasına yönlendir.

Ben bu doğru yapıyor muyum? Bu yeterince güvende mi? Bu verilerin sahte birisi için ne kadar kolay?

Nasıl olur bu yardım - Birisi oldukça karışık oldum ... Ben, kullanıcının e-posta ile, bir tablo oluşturmak ve onun session-id ve şeyler yönetmek için kullanabilirsiniz gerektiğini söyledi?

Birisi bu açıklayabilir misiniz? PHP oturumları ile doğrulamayı yönetmek için doğru yolu nedir?

Teşekkürler.

4 Cevap

Daha önce giriş / kimlik doğrulama sistemleri ile uğraştım, ve ben bu yöntemle çeşitli eksiklikleri bulabilirsiniz:

  • Eğer "Onun şifresini md5 ve veritabanı kontrol" - Bu bir kişinin veritabanına erişimi varsa, o aynı şifreleri kimin çıkarmak anlamına gelir!

BETTER APPROACH,, veritabanında username+password+email+salt MD5 depolamak için salt rastgele olan ve kullanıcının kayıt ile birlikte saklanır.

  • oturum değişkenleri doğrudan 'uid' kullanarak çok riskli olabilir. Bu düşünün: Arkadaşım benim tarayıcıdan oturum, ve o bir sızıntı bırakır. Ben hızlı bir şekilde kurabiye tarayıcıda ayarladı hangi kontrol ve onun 'uid' deşifre. Şimdi onu kendi!

BETTER APPROACH: rasgele SessionId oluşturmak için zaman kullanıcı başarıyla günlükleri, ve $_SESSION[] dizide bu oturum kimliği saklayın. Sen de onun (veritabanını kullanarak veya memcached) UID ile Sessionıd ilişkilendirmek gerekir. Advatages şunlardır:

  1. Oturumkimliği o yakalanır bile istismar edilemez böylece bile belirli bir IP bir SessionId bağlayabilirsiniz
  2. Kullanıcı başka bir yerden oturum eğer eski SessionId geçersiz kılabilir. Arkadaşım kendi bilgisayarından günlükleri Yani, benim bilgisayarda oturumkimliği otomatik olarak geçersiz hale gelir.

Ben bu soruya cevap umuyoruz.

Alkış,

JRH.

EDIT: Ben her zaman benim oturum yönetimi şeyler için elle çerezleri kullandım. Bu beni daha kolay benim web uygulamaları javascript bileşenlerini entegre yardımcı olur. Gelecekte, apps aynı gerekebilir.

Bunu yaparken yanlış bir şey yoktur

isset($_SESSION['uid']);

Oturum verileri kullanıcıya iletilen değil, bu sunucu (ya da her yerde oturum işleyicisi saklar) üzerinde depolanır. Bu kullanıcıya gönderilen çünkü ne kullanıcıya iletilir PHP tarafından oluşturulan sadece rastgele bir dize session id olduğunu, bu dersin çalınmış olabilir.

Bu açıkça saldırgan hala kullanıcıyı tehlikeye olacak oturumu alırsa rastgele veritabanında bir dize ve kullanıcıların oturum depolamak ve daha sonra kullanıcıyı tanımlamak için kullanarak, oturumu herhangi daha güvenli yapmaz dikkat edilmelidir.

Ne şimdi tartışırken session hijacking, size sadece oturumda IP adresini saklamak ve IP isteği gelen ve onunla yapılabilir ile kontrol edebilirsiniz düşünüyor olabilir olduğunu. Ancak büyük bir web uygulaması biz kullanıcı aracısı + oturumda IP adresi karma depolanması ve daha sonra her vesileyle uyumlu olduğunu kontrol edildi zaman kullanıcıların% 99 için, son zamanlarda bu ile yandı, çoğu zaman o kadar basit değil Bu ince çalıştı. Ancak, onlar sürekli hiçbir açıklama ile giriş ediliyordu buluyorduk insanlardan çağrı almaya başladı. Biz ne olup bittiğini görmek için oturum kaçırma kontrolleri oturum ve bu insanlar tek bir IP üzerinde geleceğini ve onların oturum başka devam edeceğini bulundu koymak, bu ancak nasıl kendi proxy sunucusu ile ilgisi olan bir kaçırma girişimi değildi Sonuç olarak biz class of the IP address tespit etmek bizim oturum kaçırma kodu değiştirilmiş ve oradan IP adresinin ağ bölümünü anlamaya ve IP adresi sadece bu parçaları saklamak, çalıştı, bu, biraz daha az güvenli oturum kaçırma teorik, aynı ağ içinde gelen ama bizim yanlış pozitif gitmesini neden olabilir.

Ben bu konuda% 100 değilim ama birisi gerçekten istiyorsa oturumu oluşturmak mümkün olduğunu düşünüyorum!

Bir tabloda session id tasarrufu yapmak için en güvenli yol olduğunu düşünüyorum.

Biraz Son zamanlarda bu içine baktım ama yine neyin iyi uygulama duymak ilgi, emin değilim!

İşte bakmak için bir kaç kaynaklardır

http://www.sitepoint.com/article/php-security-blunders/

http://www.phpeasystep.com/workshopview.php?id=6

Ben bu üzerine eklemek gerekir. Eğer yapıyorsa yöntemi "MD5 parola, daha sonra veritabanı kontrol", bu şifre bir tek md5 karma saklanır düşündürmektedir. Bu artık karma şifreleri saklamak standart bir yoludur.

Ben bu linki çok bilgilendirici bulundu: http://www.itnewb.com/tutorial/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard