Несколько запросов к базе данных для входа в систему - PullRequest
0 голосов
/ 22 января 2020

У меня есть три файла, которые имеют отношение к этой части моего сценария входа в систему:
/project/index.html
/project/api/user/login.php
/ project / api / objects / user. php

Индекс. html имеет простую форму входа в систему, вызывая ./api/user/login.php.
В этой форме я иметь флажок, который является опцией для пользователя, чтобы оставаться в системе или нет.

Если пользователь выбрал эту опцию, при каждом входе в систему я хотел бы проверить правильность учетных данных (функция входа в систему) -> stmt1 в пользователе. php), а также для обновления lastlogin (datetime), идентификатора и маркера безопасности, если установлен флажок (функция входа -> stmt2 в пользователе. php).

Пользователь. php включен в логин. php, который получает значения из формы индекса. html и отправляет их в функцию login () пользователя. php.
В зависимости от возвращаемое значение функции, при входе в систему. php решает, был ли вход успешным или нет.

Итеши входа lf (stmt1) работает, но обновление lastlogin, идентификатора и маркера безопасности (stmt2) не работает.

login. php

session_start();

// include database and object files
include_once '../config/database.php';
include_once '../objects/user.php';

// get database connection
$database = new Database();
$db = $database->getConnection();

// prepare user object
$user = new User($db);
// set ID property of user to be edited
$user->username = isset($_GET['username']) ? $_GET['username'] : die();
$user->password = base64_encode(isset($_GET['password']) ? $_GET['password'] : die());
$user->remember = isset($_GET['remember']) ? $_GET['remember'] : die();

$stmt1 = $user->login();
if($stmt1->rowCount() > 0){
    // get retrieved row
    $row1 = $stmt1->fetch(PDO::FETCH_ASSOC);
    $_SESSION['userid'] = $row1['uid'];

    // create array
    $user_arr=array(
        "status" => true,
        "message" => "Login erfolgreich!",
        "uid" => $row1['uid'],
        "username" => $row1['username']
    );

    $stmt2 = $user->login();
    $row2 = $stmt2->fetch(PDO::FETCH_ASSOC);
    print_r($row2);

    // create array
    $user_arr=array(
        "lastlogin" => $row2['lastlogin']
    );
}
else{
    $user_arr=array(
        "status" => false,
        "message" => "Benutzername und/oder Passwort nicht korrekt!",
    );
}
// make it json format
print_r(json_encode($user_arr));
?>

user. php

function login(){
    // select all query
    $query1 = "SELECT
                `uid`, `username`, `email`, `password`, `created`, `lastlogin`
            FROM
                " . $this->table_name . " 
            WHERE
                username='".$this->username."' AND password='".$this->password."'";
    // prepare query statement
    $stmt1 = $this->conn->prepare($query1);
    // execute query
    $stmt1->execute();
    return $stmt1;

    // set up the remain logged in function
    if(isset($this->remember)) {
        $identifier = random_string();
        $securitytoken = random_string();

        $remember = ",identifier='".$identifier."',securitytoken='".$securitytoken."'";

        setcookie("identifier",$identifier,time()+(3600*24*365)); //1 year valid
        setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //1 year valid 
    } else {
        $remember = "";
    }

    // update last login
    $query2 = "UPDATE
                " . $this->table_name . "
            SET
                `lastlogin` = '".date("Y-m-d H:i:s")."'
                ".$remember."
            WHERE
                username='".$this->username."' AND password='".$this->password."'";
    // prepare query statement
    $stmt2 = $this->conn->prepare($query2);
    // execute query
    $stmt2->execute();
    return $stmt2;
}
function random_string(){
    if(function_exists('random_bytes')) {
        $bytes = random_bytes(16);
        $str = bin2hex($bytes); 
    } else if(function_exists('openssl_random_pseudo_bytes')) {
        $bytes = openssl_random_pseudo_bytes(16);
        $str = bin2hex($bytes); 
    } else if(function_exists('mcrypt_create_iv')) {
        $bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
        $str = bin2hex($bytes); 
    } else {
        //secret key should have >12 random chars
        $str = md5(uniqid('SECRET KEY', true));
    }   
    return $str;
}

1 Ответ

1 голос
/ 22 января 2020

У пользователя. php после возврата $ stmt1; Код возвращается, а куки не установлены

Я бы сделал это ... Проверьте логин ... Если это правда, сохраните куки с идентификатором и токеном, а затем периодически проверяйте соответствие токена и идентификатора ... Если так что ... просто ОБНОВИТЕ время последнего входа в систему.

Примечание: ваше подготовленное заявление уязвимо !! Не добавляйте параметры с помощью «.» вместо этого используйте заполнители и не кодируйте пароль, лучше иметь sh это ... Тогда сравните хэши

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...