This is a follow up question to: Login system, PDO and me
Is this considered secure for a login script?
if (filter_input(INPUT_POST, "login", FILTER_UNSAFE_RAW)) {
$usercookie = 'Admin-'.uniqid(mt_rand(), true);
$lastlogin = date('d / m / y - H:ia');
$session = uniqid(mt_rand(), true);
$active = 1;
$username = filter_input(INPUT_POST, "username", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$password = filter_input(INPUT_POST, "password", FILTER_UNSAFE_RAW);
$query = 'SELECT password FROM wcx_admin WHERE username = :username';
$stmt = $backend->queryIt($query);
$stmt = $backend->bind(':username', $username);
$stmt = $backend->execute();
$dbpass = $backend->getColumn();
if(password_verify($password, $dbpass)) {
$query = 'UPDATE wcx_admin SET active = :active, lastlogin = :lastlogin, session = :session WHERE username = :username';
$stmt = $backend->queryIt($query);
$stmt = $backend->bind(':active', $active);
$stmt = $backend->bind(':lastlogin', $lastlogin);
$stmt = $backend->bind(':session', $session);
$stmt = $backend->bind(':username', $username);
$login = $backend->execute();
}
if($login) {
$_SESSION['loggedin'] = $session;
$_SESSION['auth'] = $session;
setcookie( 'wcxadmin', $usercookie, time()+3600);
header('Location: index.php');
}
else {
$_SESSION['errors'] = 'Incorrect Username or Password';
header('Location: index.php');
}
}
The bind function:
public function bind($param, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
Error output:
if(isset($_SESSION['errors'])) {
echo '<div class="loginerror">'.$_SESSION['errors'].'</div>';
$_SESSION['errors'] = '';
}