5E e 5I Sia: La gestione dello script Captcha in Php

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

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi in Excel e fogli di Google