|
|
Variabili globali PHP:
Il processo che consente il passaggio dati fra pagine web è un mattone fondamentale per
la costruzione di siti dinamici.
La procedura che può apparire semplice genera il problema di superare le barriere
che spesso i diversi spazi web pongono al suo utilizzo.
In effetti gli script che troviamo in rete possono funzionare teoricamente su ogni spazio web
che supporta il linguaggio PHP. In pratica alcuni script si possono bloccare per i limiti
posti dal gestore dello spazio web e per il continuo progredire del linguaggio PHP.
Il limite che analizziamo adesso è quello generato dall'impostazione di
register_globals
register_globals Impostato su ON permette di utilizzare le variabili globali solo
digitando il nome della variabile.
register_globals Impostato su OFF permette di utilizzare le variabili globali solo
DOPO che sono state ricavate dall'array globale generato.
In questo articolo analizziamo register_globals OFF
Descrizione:
Per passare dati fra pagine web il metodo da usare è il solito, ossia con variabili GET, POST
o SESSION.
La diversità la troviamo quando sulla pagina di destinazione dobbiamo utilizzare le variabili
che abbiamo spedito.
In pratica dobbiamo ridefinire le variabili utilizzando i dati che troviamo fra le variabili
globali.
Con alcuni esempi possiamo comprendere quello appena detto:
Esempio:
Pagina di partenza:
....
....
<a href="pag_destinazione.php?ciao=1>....</a>//esempio di passaggio dati con GET
<form action="pag_destinazione.php" method="post">//esempio di passaggio dati con POST
....
<input type="text" name="ciao2" size=10 maxlength=10>
<input type="submit" value="Spedisci">
....
</form>
Pagina di destinazione:
$ciao=$_GET['ciao'];//Prendiamo la variabile dall'array globale $_GET
$ciao2=$_POST['ciao2'];//Prendiamo la variabile dall'array globale $_POST
....
....
Come abbiamo visto il loro utilizzo è molto semplice, basta ridefinire le variabili nella pagina
di destinazione.
Domanda:
Se trasmetto la stessa variabile con entrambi i metodi (sia GET che POST)?
Risposta:
Semplice, basta inserire un ciclo IF che controlli che tipo di variabile è stata
definita.
if ($_GET['ciao']==null){//Chiedo se il metodo GET è nullo
$ciao=$_POST['ciao'];//Se GET è nullo la variabile è POST
}
else{//Viceversa, se la variabile GET Non è nulla...
$ciao=$_GET['ciao'];//... utilizzo la variabile GET
}
Sessioni:
Stesso metodo per ridefinire le variabili delle sessioni, dobbiamo solo usare la seguente
sintassi nella pagina di destinazione:
$ciao=$_SESSION['ciao'];
Da adesso abbiamo a disposizione anche la variabile '$ciao' trasmessa con una sessione.
Sicurezza
register_globals OFF si utilizza per migliorare la sicurezza con PHP,
per scongiurare che un malintenzionato inserisca
delle variabili fittizie o con valori falsati, che potrebbero
modificare il risultato delle pagine, e nei casi peggiori modificare anche un valore dentro
ad un database (dipende dalla funzione dello script).
Con gli array globali scongiuriamo che questo avvenga, o almeno aiutiamo lo script nella
protezione.
Per aumentare ancora la protezione dello script suggeriamo di non spedire i valori
da manipolare, ma delle variabili di controllo.
Esempio:
Se devo trasmettere un valore per aggiungere o modificare un dato (Y) in un database non
inserisco il dato (Y), ma un valore X.
Nella pagina di destinazione chiedo se il valore trasmesso è X, e di conseguenza sommo (uso) Y.
Questo se il dato Y è una costante, tuttavia è da evitare (se possibile) di trasmettere
i dati direttamente con URL (Metodo GET) o con i form (Metodo POST), questo perché
chiunque può vedere il codice.
Approfondiamo in pratica:
Immaginiamo di dover contare i clic in entrata su un sito per inserirlo nella top-ten del
nostro sito.
In questo caso ogni volta che clicchiamo sul sito dobbiamo aumentare di '1' il numero di
clic nel database.
Potrei scrivere una riga tipo:
<a href="redirect.php?clic=1&url=www.urlsito.it">Nome sito</a>
In questo caso NON DEVO usare direttamente $clic come variabile di
somma nel database. Questo perché un malintenzionato potrebbe utilizzare il nome della
variabile ($clic) per generare degli script che danneggiano il sito.
Per non dare la possibilità di manipolare dati dobbiamo usare $clic
come variabile di controllo.
In pratica nella pagina dove inseriamo la query per la manipolazione dati dobbiamo inserire
un filtro, un semplice ciclo IF:
If ($clic==1){
$numeroclic=$numeroclic+1;
}
In questo modo abbiamo scongiurato ogni attacco diretto alle variabili, ed il nostro
malintenzionato non saprà mai come si chiama la variabile di somma ($numeroclic).
|
|
|
Script
| |
Motore di ricerca script
|
|