2016-09-07 2 views
0

У меня есть этот метод в модуле входа в Codeigniter (версия 3.0). Он отлично работает, но это безопасно? Есть ли лучшее решение для проверки входа и пароля с помощью PHP password_verify? (PHP 5.6, MySQL 5.0).Codeigniter password_verify method

 $user = $this->input->post('username'); 
     $password = $this->input->post('password'); 
     $myquery = $this->db->query("SELECT * FROM users WHERE user = '$user'"); 
     $row = $myquery->row(); 

     if (isset($row)) 
     { 
      //Using hashed password - PASSWORD_BCRYPT method - from database 
      $hash = $row->password; 


      if (password_verify($password, $hash)) { 

       echo 'Password is valid!'; 


      } else { 

       echo 'Invalid password.'; 

      } 


     } else{ 

      echo 'Wrong user!'; 
     } 
+1

Я уверен, что это ** является функцией PHP 'password_verify()', и эта функция безопасна и рекомендуется использовать. Еще важнее то, как генерируются хеши, но я предполагаю, что вызывается функция 'password_hash()'. – martinstoeckli

ответ

3

ваш код выглядит хорошо, но вы можете сделать это немного больше в CI Way и немного более чистый, в этом случае вы защищены от SQL инъекций и у вас есть немного больше Инкапсуляции

Try что-то вроде этого:

public function checkLogin() 
{ 
    $this->load->library("form_validation"); 

    $arrLoginRules = array 
    (
     array(
      "field" => "username", 
      "label" => "Benutzername", 
      "rules" => "trim|required" 
     ), 
     array(
      "field" => "password", 
      "label" => "Passwort", 
      "rules" => "trim|required" 
     ) 

    ); 

    $this->form_validation->set_rules($arrLoginRules); 

    try 
    { 
     if (!$this->form_validation->run()) throw new UnexpectedValueException(validation_errors()); 

     $user = $this->input->post('username'); 
     $password = $this->input->post('password'); 
     $query = $this->db 
      ->select("*") 
      ->from("users") 
      ->where("user", $user) 
      ->get(); 

     if ($query->num_rows() != 1) throw new UnexpectedValueException("Wrong user!"); 

     $row = $query->row(); 
     if (!password_verify($password, $row->hash)) throw new UnexpectedValueException("Invalid password!"); 

     echo "valid user"; 

    } 
    catch(Excecption $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

Fore больше информации, посмотрите на Form validation и документацию Query Builder.

+0

Спасибо за совет. –

+0

если ответ был полезен, примите его pls;) – sintakonte