簡體   English   中英

Codeigniter安全登錄系統

[英]Codeigniter secure login systems

我在項目中使用codeigniter作為php框架。 有人說它在登錄過程中非常脆弱,他可以輕松登錄而無需輸入密碼。 我剛剛在密碼中使用了md5哈希進行安全登錄。 我知道那還不夠。 有人可以在這方面建議我更多的保密程序嗎? 這是我的登錄控制器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin_login extends CI_Controller {

public function __construct()
{
    session_start();
    parent::__construct();
    $this->load->helper('form');
    $this->load->helper('url');        
    $this->load->model('admin_model', 'Admin_model', true);
}

public function index(){
        if(is_loggedin())
        {
            get_access_controller();
        }
        else
        {
            $this->load->view('login_admin', '');
        }
    }  

   function login_check()
        {
            $data['username']  = $_POST['username'];
            $data['password']  = md5($_POST['password']);            
            $adminInfo = $this->Admin_model->login_check($data); 

        if($adminInfo)
        {                
            $_SESSION['admin_id']           = $adminInfo['admin_id'];
            $_SESSION['admin_name']         = $adminInfo['admin_name'];
            $_SESSION['school_id']         = $adminInfo['school_id'];
            $_SESSION['is_superadmin']     = $adminInfo['is_superadmin'];
            $_SESSION['is_loggedin']        = 1;

            message('Loggedin successfully');
            get_access_controller();
        }
        exception('invalid login information');
        redirect('admin_login');exit;
    }

    function logout()
    {
       unset($_SESSION['admin_id'],$_SESSION['admin_name'],$_SESSION['school_id'],$_SESSION['is_loggedin'],$_SESSION['is_superadmin']); 
       message('Successfully logout');
       redirect('admin_login');exit;
    }
}

還有我的登錄模型

if(!defined('BASEPATH'))
exit('No direct script access allowed');
class Admin_model extends CI_Model
{
    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }
    /**For Admin Login Portion**/
  function login_check($data)
    {
        $user = $data['username'];
        $password = $data['password'];        
        $sql = "SELECT * FROM tbl_admin WHERE email = '$user' AND password = '$password' AND status = 1 LIMIT 1";
        $query = $this->db->query($sql);
        return $query->row_array();
    }

對於密碼哈希,請查看PHP密碼API-如果您的PHP版本與之匹配,請參閱password_hash()和password_verify(),例如。

然后,您必須轉義從客戶端獲得的值,例如密碼,登錄名:在這里,您不做任何保護輸入值的操作,您將面臨SQL注入。 http://www.codeigniter.com/user_guide/database/queries.html#escaping-queries

由於您在執行查詢時沒有進行任何驗證,因此它可能容易受到SQL Injection攻擊的攻擊。 您可以使用查詢綁定來提高安全性。

$sql = "SELECT * FROM tbl_admin WHERE email = ?1 AND password = ?2 AND status = 1 LIMIT 1";
$query = $this->db->query($sql, ($user, $password));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM