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::$user, Config::$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.
- È corretto scrivere il codice in questa maniera?
- 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)
- Ho letto che l'utilizzo di un token dovrebbe prevenire session hijacking, potreste spiegarmi meglio cosa sono e come utilizzarli?