Ho buone conoscenze di php procedurale e avendo studiato da poco la OOP stavo provando a fare delle semplici esercitazioni. È corretto utilizzarla come sto facendo?

core.php in cui verranno inclusi tutti i file delle classi usate:
Codice PHP:
<?php
require_once 'classes/config.php';
require_once 
'classes/db.php';
?>
config.php in cui ci sono i dati mysql:
Codice PHP:
<?php
class Config{
    public static 
$host 'localhost';
    public static 
$user 'root';
    public static 
$pass 'asdasd1';
    public static 
$db 'login';
}
?>
db.php in cui ci sono tutte le operazioni che posso fare interrogando il database:
Codice PHP:
<?php
class Db{
    public function 
connect(){
        try {
            
$db = new PDO("mysql:host=".Config::$host.";dbname=".Config::$db Config::$userConfig::$pass);
            return 
$db;
        }
        catch(
PDOException $e) {
            echo 
'Errore: '$e->getMessage();
            exit;
        }
    }

    public static function 
LogIn($user$pass){
        
$db self::connect();
        
$sql $db->query('SELECT * FROM users WHERE username = "'.$user.'" AND password = "'.$pass.'"');
        
$res $sql->fetch();
        if(
$res){
            echo 
"Login ok!";
        }else{
            echo 
"Login failed!";
        }
    }
}
?>
index.php è un semplice form html:
Codice PHP:
<form action="login.php" method="POST">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<
input type="submit" value="LogIn" name="submit"/>
</
form
login.php per il login:
Codice PHP:
<?php
require_once './inc/core.php';
if(isset(
$_POST['submit'])){
    
$username $_POST['username'];
    
$password $_POST['password'];
    
Db::LogIn($username$password);
}
?>

Ho letto molte guide per fare un login sul web ma ognuna differiva dall'altra perché ognuno scrive il codice alla propria maniera.


  1. È corretto scrivere il codice in questa maniera?
  2. Per ora mi sono limitato a scrivere un codice molto semplice che verifica che l'utente esista nel database e la password corrisponda, ho saltato molte cose come la verifica che entrambi i campi del form siano settati, la criptazione della password, le sessioni, etc. Cosa manca al mio codice per essere sicuro al 99.9%? (a parte la criptazione della password)
  3. Ho letto che l'utilizzo di un token dovrebbe prevenire session hijacking, potreste spiegarmi meglio cosa sono e come utilizzarli?