Validazione dei moduli PHP
- Pagina precedente Elaborazione del modulo PHP
- Pagina successiva Campi obbligatori del modulo PHP
Questa sezione e la sezione successiva spiegano come utilizzare PHP per verificare i dati dei moduli.
Validazione dei moduli PHP
Suggerimento:Fare attenzione alla sicurezza quando si gestiscono moduli PHP!
Queste pagine mostreranno come gestire in sicurezza i moduli PHP. La validazione dei dati del modulo HTML è importante per prevenire gli hacker e lo spam!
L'HTML del modulo che useremo in seguito contiene vari tipi di campi di input: campi di testo obbligatori e opzionali, pulsanti di opzione e pulsante di invio:
Il modulo sopra utilizza le seguenti regole di validazione:
Campo | Regole di validazione |
---|---|
Nome | Obbligatorio. Deve contenere lettere e spazi. |
Obbligatorio. Deve contenere un indirizzo email valido (che include @ e .). | |
Sito web | Opzionale. Se compilato, deve contenere un URL valido. |
Commento | Opzionale. Campo di input multilinha (casella di testo). |
Gender | Obbligatorio. È necessario selezionare un'opzione. |
Prima di tutto, diamo un'occhiata al codice HTML puro di questo modulo:
Campo di testo
Il campo name, email e website appartengono agli elementi di input di testo, il campo comment è una casella di testo. Il codice HTML è il seguente:
Nome: <input type="text" name="name"> E-mail: <input type="text" name="email"> Sito web: <input type="text" name="website"> Commento: <textarea name="comment" rows="5" cols="40"></textarea>
Pulsante di opzione
Il campo gender è un pulsante di opzione, il codice HTML è il seguente:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
Elementi del modulo
Il codice HTML del modulo è il seguente:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
Quando si invia questo modulo, i dati del modulo vengono inviati tramite method="post".
Cos'è la variabile $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] è una variabile superglobale che restituisce il nome del file dello script attualmente eseguito.
Quindi, $_SERVER["PHP_SELF"] invia i dati del modulo alla pagina stessa, non saltando a un'altra pagina. In questo modo, l'utente può ricevere informazioni di errore nella pagina del modulo.
Cos'è la funzione htmlspecialchars()?
La funzione htmlspecialchars() trasforma i caratteri speciali in entità HTML. Questo significa che i caratteri HTML come < e > vengono sostituiti con < e >. Questo impedisce agli attaccanti di sfruttare HTML o JavaScript注入 nei form (attacchi cross-site scripting).
Importante suggerimento sulla sicurezza dei form PHP
La variabile $_SERVER["PHP_SELF"] può essere sfruttata dagli hacker!
Se la tua pagina utilizza PHP_SELF, gli utenti possono inserire trattini di basso e eseguire script cross-site (XSS).
Suggerimento:Cross-site scripting (XSS) è un tipo di vulnerabilità di sicurezza informatica, comune nelle applicazioni web. XSS permette agli attaccanti di inserire script client su pagine web visitate da altri utenti.
Supponiamo che una pagina chiamata "test_form.php" contenga il seguente modulo:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Ora, se l'utente accede a un URL normale nella barra degli indirizzi: "http://www.example.com/test_form.php", il codice sopra viene convertito in:
<form method="post" action="test_form.php">
Fino ad ora, tutto è normale.
Ma, se l'utente ha inserito l'URL seguente nella barra degli indirizzi:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
In questo caso, il codice sopra viene convertito in:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Questo codice aggiunge uno script e un comando di avviso. E quando questa pagina viene caricata, viene eseguito il codice JavaScript (l'utente vedrà una finestra di avviso). Questo è solo un caso semplice e innocuo su come viene utilizzato il variabile PHP_SELF.
Dovresti essere consapevole Il tag <script> può aggiungere qualsiasi codice JavaScript!Gli hacker possono reindirizzare l'utente a un file su un altro server, il cui codice maligno può modificare variabili globali o inviare il modulo a un altro indirizzo per salvare i dati dell'utente, ecc.
Come evitare che $_SERVER["PHP_SELF"] venga sfruttato?
Utilizzando la funzione htmlspecialchars() possiamo evitare che $_SERVER["PHP_SELF"] venga sfruttato.
Il codice del modulo è il seguente:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
La funzione htmlspecialchars() trasforma i caratteri speciali in entità HTML. Ora, se l'utente tenta di sfruttare la variabile PHP_SELF, il risultato sarà il seguente:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Impossibile sfruttare, nessun danno!
Verifica dei dati del modulo tramite PHP
La prima cosa da fare è passare tutte le variabili attraverso la funzione PHP htmlspecialchars().
Dopo aver utilizzato la funzione htmlspecialchars(), se l'utente tenta di inviare il seguente contenuto nel campo di testo:
<script>location.href('http://www.hacked.com')</script>
- Il codice non verrà eseguito perché verrà salvato come codice escapato, come questo:
<script>location.href('http://www.hacked.com')</script>
Ora questa riga di codice è sicura da visualizzare sulla pagina o nell'email.
Quando l'utente invia il modulo, dobbiamo fare due cose:
- (Attraverso la funzione PHP trim()) Rimuovere i caratteri inutili dai dati di input dell'utente (spazi in eccesso, tabulazioni, newline)
- (Attraverso la funzione PHP stripslashes()) Rimuovere gli backslash () dai dati di input dell'utente
Poi creiamo una funzione di controllo (più efficiente rispetto a scrivere codice ripetutamente).
Nomeiamo la funzione test_input()
Ora, possiamo controllare ogni variabile $_POST tramite la funzione test_input(),lo script è il seguente:
Esempio
<?php // Definire variabili e impostarle a valore nullo $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Si prega di notare che all'inizio dello script abbiamo verificato se il modulo è stato inviato utilizzando $_SERVER["REQUEST_METHOD"]. Se REQUEST_METHOD è POST, il modulo è stato inviato e deve essere verificato. Se non è stato inviato, saltare la verifica e visualizzare un modulo vuoto.
Tuttavia, nell'esempio sopra, tutti i campi di input sono opzionali. Anche se l'utente non inserisce alcun dato, lo script funzionerà correttamente.
Il passo successivo è creare i campi di input obbligatori e creare i messaggi di errore da utilizzare quando necessario.
- Pagina precedente Elaborazione del modulo PHP
- Pagina successiva Campi obbligatori del modulo PHP