L'array superglobale $_POST in PHP

L'array superglobale $_POST in PHP

POST è un array superglobale che viene utilizzato per inviare informazioni al server, solo che a differenza di $_GET le informazioni scambiate con il server non sono in chiaro nell'url e non possono quindi essere modificate dall'utente, risultando così più sicure.

Esempio di sintassi con $_POST in php:

<?php
$username = $_POST["username"];
$password = $_POST["password"];
echo "L'username è $username e la password è $password"
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="post.php" method="POST">
        <input type="text" name="username" placeholder="Username *">
        <input type="password" name="password" placeholder="Password *">
        <input type="submit" value="Invia">
    </form>
</body>
</html>

Come abbiamo detto in precedenza, tramite _POST i dati NON vengono aggiunti all'URL. In questo esempio, per poter generare gli array con chiave username e password e valori Donato e miapassw.

La funzione extract($_POST)

Con la funzione extract($_POST) possiamo estrarre i valori dell'array $_POST e creare delle variabili con i relativi parametri chiave-valore.

Facciamo un esempio della funzione extract($_POST) che estrae i valori all'interno di un form su una pagina web.

<?php
extract($_POST);
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="get.php" method="POST">
        <input type="text" name="nome" placeholder="Nome *">
        <input type="text" name="cognome" placeholder="Cognome *">
        <input type="submit" value="Invia">
    </form>
</body>
</html>

Misure di sicurezza minime.

E' possibile che un utente malintenzionato, possa lanciare del codice malevolo che PHP potrebbe eseguire. Facciamo un esempio inserendo un semplice alert javascript all'interno del form:

<?php
if(isset($_POST['username'])){
    echo $_POST['username'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="post.php" method="POST">
        <input type="text" name="username" placeholder="Username *">
        <input type="password" name="password" placeholder="Password *">
        <input type="submit" value="Invia">
    </form>
</body>
</html>
Possiamo notare che cliccando su Invia, il codice javascript viene eseguito.

Per evitare che venga passato in output quello che viene passato dagli utenti in input, possiamo utilizzare la funzione htmlspecialchars()

<?php
if(isset($_POST['username'])){
    $usernameClean = htmlspecialchars($_POST['nome']);
    echo $usernameClean;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="post.php" method="POST">
        <input type="text" name="username" placeholder="Username *">
        <input type="password" name="password" placeholder="Password *">
        <input type="submit" value="Invia">
    </form>
</body>
</html>

In questo modo, ci assicuriamo che i tag di apertura e chiusura vengano convertiti in entità html e quindi il codice non viene eseguito.

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram