2013-08-24 23 views
0

IM使用腳本從這裏:http://www.php-login.netPHP腳本中使用會話數據登錄,它是一個安全隱患

我改變它來滿足自己的需要,但我認爲這部分腳本:

// if user has an active session on the server 
    elseif (!empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)) { 

     $this->loginWithSessionData();  

     // checking for form submit from editing screen 
     if (isset($_POST["user_edit_submit_name"])) { 

      $this->editUserName(); 

     } elseif (isset($_POST["user_edit_submit_email"])) { 

      $this->editUserEmail(); 

     } elseif (isset($_POST["user_edit_submit_password"])) { 

      $this->editUserPassword(); 

     } 

我不太清楚會話變量是如何工作的,因爲服務器上的技術上他們不能直接修改,但是這部分代碼顯示,如果有人與Cookie混淆,它可以間接修改。

private function loginWithSessionData() { 

    $this->user_name = $_SESSION['user_name']; 
    $this->user_email = $_SESSION['user_email']; 

    // set logged in status to true, because we just checked for this: 
    // !empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1) 
    // when we called this method (in the constructor) 
    $this->user_is_logged_in = true;   

} 

林不知道,如果可能的,但如果我的餅乾,並設置用戶名= X搞砸和很幸運,並設置is_logged_in爲1可能,讓用戶訪問?我確定有一個更安全的方法來驗證會話或做餅乾本身也帶有自己的驗證類型,如檢查機器哈希,並且哈希還必須與我們存儲在服務器上的哈希相匹配?而不是像user_logged_in這樣簡單的東西,我應該使用一個隨機的字符串iftodaywasarainyday,只是在內部評論它,所以我知道這個值與我的is_logged_in相對應,或者它甚至很重要。

我會做一些更多關於這個主題的閱讀,但我想我採取了作者的話,因爲頁面上的前3個字是「一個簡單,乾淨和安全」,該網站確實看起來不錯,但作爲我正在重構代碼有很多todo語句讓我擔心它的工作正在進行,而不是完成的腳本

回答

4

會話數據存儲在服務器端。實際的數據根本不在cookie中。該cookie只是一個讓服務器知道要加載哪個會話數據的ID。用戶不能修改這個會話數據,除非你允許他們編寫代碼。