PHP: Sicurezza base
Sicurezza base in PHP
La sicurezza è una parte essenziale nello sviluppo in PHP. Analizziamo le minacce comuni e le buone pratiche per proteggere applicazioni e dati degli utenti.
Introduzione alla sicurezza
Molte vulnerabilità derivano da input non controllato o da cattiva gestione dei dati. È necessario applicare regole precise per ridurre i rischi come SQL injection, cross-site scripting (XSS) e furto di sessione.
Validazione e sanitizzazione input
Ogni dato proveniente da form, URL o cookie va validato e ripulito prima dell’utilizzo. PHP offre funzioni come filter_input() e filter_var().
Codice Esempio: validazione input

<?php
$email = "[email protected]";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email valida.";
} else {
echo "Email non valida.";
}
?>
<!-- Output nel browser:
Email valida.
-->
Prevenzione SQL Injection
Mai inserire direttamente input utente nelle query SQL. Bisogna usare i prepared statements con mysqli o PDO.
Codice Esempio: query sicura con mysqli

<?php
$conn = new mysqli("localhost", "root", "", "scuola");
$stmt = $conn->prepare("SELECT * FROM utenti WHERE username = ?");
$stmt->bind_param("s", $username);
$username = "mario";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row["username"] . "<br>";
}
?>
<!-- Output nel browser:
mario
-->
Prevenzione XSS (Cross-Site Scripting)
Per evitare l’iniezione di codice JavaScript malevolo, bisogna convertire i caratteri speciali in entità HTML usando htmlspecialchars().
Codice Esempio: prevenzione XSS

<?php
$input = "<script>alert('XSS');</script>";
echo htmlspecialchars($input);
?>
<!-- Output nel browser:
<script>alert('XSS');</script>
-->
Sicurezza delle sessioni
Le sessioni devono essere protette contro furti di identificatore. È utile rigenerare spesso l’ID di sessione con session_regenerate_id().
Codice Esempio: rigenerazione ID sessione

<?php
session_start();
session_regenerate_id(true);
echo "Nuovo ID sessione: " . session_id();
?>
<!-- Output nel browser:
Nuovo ID sessione: asd87as6d87asd6a...
-->
Tabella riassuntiva sicurezza base
Minaccia | Protezione | Funzioni utili |
---|---|---|
Input non valido | Validazione e sanitizzazione | filter_var(), filter_input() |
SQL Injection | Prepared statements | mysqli, PDO |
XSS | Escape output | htmlspecialchars() |
Hijacking sessioni | Rigenerazione ID | session_regenerate_id() |
Considerazioni
La sicurezza di un’applicazione PHP dipende soprattutto dal controllo degli input e dalla gestione corretta delle sessioni. È fondamentale adottare sempre query sicure, validazione e escaping dell’output. Le tecniche illustrate rappresentano solo le basi: un’applicazione robusta deve integrare ulteriori metodi di difesa, come l’uso di espressioni regolari per controllare i dati e altre misure avanzate di protezione.