Sessions tarafından PHP giriş kod geliştirmek için

2 Cevap php

Which one is the better way to handle login in PHP?

#1 PHP.net

    $email = $_POST['email'];
    $password = $_POST['password'];
    if($user->connection($email,$password)){ // user logging validation
        session_start();     //start the session
        $_SESSION['user_logged'] = true;  // user logged in
        header('location : control_panel.php');  // go to control panel
    }
    else {  // go back to logging page
        header('location : logging.php?' . $user->error_string);
    }

#2 Me after Paul Dixon's improvements and Sebasgo's improvements

 if (isset($_REQUEST['email'])) {
     $result = pg_prepare($dbconn, "query22", "SELECT passhash_md5 FROM users
         WHERE email=$1;");                                             
     $passhash_md5 = pg_execute($dbconn, "query22", array($_REQUEST['email']));                 

     session_start(); 
     $_SESSION['logged_in'] = false;                                                                                                           
     if ($passhash_md5 == $_REQUEST['passhash_md5']) {                                            
         $_SESSION['logged_in'] = true;                                                                   

 }
 header('Location: index.php');

Kodu # 2 Ben hala işe almak için çalışıyorum, çünkü $_REQUEST komutları bulunur.

2 Cevap

Siz oturum kimlikleri kendinizi yönetmek için denemek gerekir. (Her yeni oturum için tek session id artırma) önerdiğiniz gibi basit bir şema ciddi bir güvenlik sorunu içerir: taze üretilen bir oturum kimliği ile bir kullanıcı trivially kendi biraz daha küçük kimlikleri çalışırken diğer geçerli oturum kimlikleri tahmin edebilirsiniz. Böylece iki başkasının oturumu kazanmak çok kolaydır.

PHP sizin için yeni oturum kimlikleri nesil yönetmek izin verirseniz, PHP potansiyel bir saldırgan için tahmin etmek zor olacak, yeni kimlikleri oluşturmak için bir sözde rastgele jeneratör kullanıyor. Bu etkili yukarıda özetlenen saldırı senaryosu önler.

Ayrıca, session_start() çağırmadan önce $_SESSION erişmek istediğiniz hemen hemen asla oturumu dizi hep boş olacak önce çünkü. Bu nedenle empty($_SESSION['SID']) daima arttıracak bir test false.

Bottom line: Ben şiddetle PHP.net yapar gibi oturum yönetmenin basit bir şekilde sopa öneririz.

Herkesin aynı oturum paylaşımı olacak demektir aynı kimliği, sahip tüm yeni oturumları zorlamak! Muhtemelen ne amaçlanmaktadır?

Sen session_id çağrısı () atlarsanız ve sadece PHP oturumu için benzersiz bir kimlik oluşturma çaresine sağlayabilirsiniz.

Ayrıca, gerçekten herhangi bir geçerli oturum değişkenleri ile doldurulur sağlamak için $ _SESSION dizisini kullanmadan önce session_start aramalısınız.