2011-12-04 30 views
1

這種技術足夠安全嗎?我能相信這樣的會議嗎?或者我應該添加一些東西?這個認證/登錄程序安全嗎?

驗證 - 模

class Auth { 

    public function login($user, $pass, $random_unique_salt) 
    { 
     if ($this->_bcrypt($pass, $random_unique_salt) === 'correct password hash') // etc. 
     { 
      // Success... 
      $session = Session::instance(); 
      $session->set('login', TRUE); 
      $session->regenerate(); 
     } 
    } 
} 

基地-controller

class Controller_Base extends Controller { 

    protected $_login = FALSE; 

    public function before() 
    { 
     $this->_login = Session::instance()->get('login', FALSE); 
    } 
} 

成員只有-controller

class Controller_Membersonly extends Controller_Base { 

    public function action_index() 
    { 
     if ($this->_login === TRUE) 
     { 
      // Success... 
      echo 'Show (safely?) some secrets.'; 
     } 
    } 
} 
+0

略微OT,但它看起來像你的密碼散列方案不使用鹽。你用什麼哈希?一些簡單的md5/sha-x,或爲密碼散列而設計的函數,比如bcrypt? – CodesInChaos

+1

這只是一個隨機的例子,這就是爲什麼有評論//等等。Bcrypt是要走的路。 – kaulusp

+0

好:)順便說一句,我建議你放棄你的標籤之一,以支持「php」標籤。一些可以回答這個問題的人可能會把「php」當作最喜歡的標籤,但不是你的。 – CodesInChaos

回答

0

該技術足夠安全。我可以相信這樣的會議。

1

的只有我看到的漏洞是CWE-706 - Use of one way has with a predictable salt。每個密碼都需要有自己獨特的鹽。 bcrypt不是一種錯誤的密碼哈希方法,因爲它不能在GPU或FPGA上高效實現。

代碼風格有點偏執,不是壞事。您的比較運算符有點過分。請確保你閱讀了fuzzy typing in php,以便將來不會犯錯。

+0

感謝您的輸入!此代碼示例不完整。 $ random_unique_salt指的是不可預測的鹽。 – kaulusp

+0

@stacknoob是的,但它必須是唯一的每個密碼,它應該是一個登錄功能的參數。 – rook

+0

也可以在登錄方法中爲每個密碼生成唯一的salt,但將__ $ random_unique_salt__添加到參數是有意義的,因爲在此示例中沒有實現鹽生成器。 – kaulusp