[英]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.