5E e 5I Sia: La gestione dello script Captcha in Php (bisogna modificare il file php.ini per l'estensione GD)
Creare una pagina di login in PHP che utilizzi le sessioni e un CAPTCHA può aiutare a migliorare la sicurezza contro accessi non autorizzati e bot. Ecco una semplice implementazione passo a passo:

1. Struttura dei file
- `login.php`: Pagina di login con il form.
- `validate.php`: Script per validare l'accesso.
- `captcha.php`: Genera il CAPTCHA.
- `welcome.php`: Pagina mostrata dopo un accesso riuscito.
2. Codice dei file
`login.php`
Questo file contiene il form di login e mostra il CAPTCHA.
```php
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="validate.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<img src="captcha.php" alt="captcha"><br><br>
<label for="captcha">Captcha:</label>
<input type="text" id="captcha" name="captcha_code" required><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
```
`validate.php`
Qui vengono validate le credenziali e il CAPTCHA.
```php
<?php
session_start();
// Simulare un controllo delle credenziali
$correct_username = 'admin';
$correct_password = 'password123';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = htmlspecialchars($_POST['username']);
$password = htmlspecialchars($_POST['password']);
$captcha_code = htmlspecialchars($_POST['captcha_code']);
if ($username == $correct_username && $password == $correct_password) {
if ($captcha_code == $_SESSION['captcha_text']) {
// Login corretto
$_SESSION['loggedin'] = true;
header("Location: welcome.php");
exit;
} else {
echo "Captcha incorretto.";
}
} else {
echo "Username o password non validi.";
}
}
?>
```
`captcha.php`
Genera e mostra un CAPTCHA.
```php
<?php
session_start();
// Configurazioni CAPTCHA
$captcha_width = 100;
$captcha_height = 40;
$font_size = 18;
$font_path = './arial.ttf'; // Assicurati di avere un font truetype
// Genera un testo casuale per il CAPTCHA
$captcha_text = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 6);
$_SESSION['captcha_text'] = $captcha_text;
// Crea l'immagine
$image = imagecreate($captcha_width, $captcha_height);
$background_color = imagecolorallocate($image, 255, 255, 255); // bianco
$text_color = imagecolorallocate($image, 0, 0, 0); // nero
// Aggiungi il testo all'immagine
imagettftext($image, $font_size, 0, 10, 30, $text_color, $font_path, $captcha_text);
// Mostra l'immagine
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
```
`welcome.php`
Pagina dopo un accesso riuscito.
```php
<?php
session_start();
if (!isset($_SESSION['loggedin'])) {
header('Location: login.php');
exit;
}
echo "<h1>Benvenuto!</h1>";
echo "<p>Sei loggato come " . htmlspecialchars($_SESSION['username']) . "</p>";
?>
```
Spiegazione delle istruzioni
1. Sessione: Utilizziamo `session_start()` per avviare una sessione e gestire i dati del login e del CAPTCHA tra le diverse pagine.
2. CAPTCHA: Generiamo un'immagine CAPTCHA dinamica con `PHP GD` per prevenire accessi automatizzati. Il testo CAPTCHA viene memorizzato nella sessione per la verifica.
3. Autenticazione: In `validate.php`, controlliamo la corrispondenza tra username, password e CAPTCHA con i dati memorizzati.
4. Protezione: Usiamo `htmlspecialchars()` per evitare attacchi XSS.
Per un'applicazione reale, le credenziali dovrebbero essere gestite con un database e password hashate. Il font `arial.ttf` deve essere presente nel percorso specificato
Commenti
Posta un commento