ehi filippo guarda che cavolo ho tirato fuori stanotte
allora mettiamo che l'url sia questa
Codice PHP:
http://tuosito.org/forum/index.php?variabile=on:lo&star=yes
Codice PHP:
//////////////////////////////////$_GET////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//piccolo script di sicurezza interna del server
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']!="")
{
if (strpos($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])===false)
{
// Qualcosa non quadra: uscire dal programma, creare file di log, etc etc.
}
}
//prevents some problems with IIS Servers
if (!isset($_SERVER['REQUEST_URI'])) {
$_SERVER['REQUEST_URI'] = substr($_SERVER['PHP_SELF'],1 );
if (isset($_SERVER['QUERY_STRING']) AND $_SERVER['QUERY_STRING'] != "") {
$_SERVER['REQUEST_URI'] .= "?".$_SERVER['QUERY_STRING'];
}
}
/////////LO SCRIPT INIZIA QUI////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
$query = $_SERVER["REQUEST_URI"]; //prendiamo la url
$query = str_replace("$_SERVER[SCRIPT_URL]?", "", $query); //ma più in particolare solo dal punto interrogativo della pagina in poi
$query = explode("&", $query); //dividiamo tutte le variabili immesse
$query_count = count($query); //le contiamo
if ($query_count > "15"){exit;} //se sono superiori a 15 per una questione di irregolarità blocchiamo lo script
for ($i = 0; $i <= $query_count; $i++) {
$queryt = explode("=", $query[$i]); //andiamo a selezionare ogni variabile
if (strlen($query[$i]) > '50'){exit;} //se il numero dei caratteri dentro la variabile supera 50 lo fermiamo per non sovraccaricare il server
//e da qui in poi si fa tutta una serie di rimpiazzamenti per ogni simbolo inserito, questo evita per esempio di non andare a interferire con le funzioni del nostro sistema
$queryt[1] = str_replace("<", "", $queryt[1]);
$queryt[1] = str_replace(">", "", $queryt[1]);
$queryt[1] = str_replace("text/html", "", $queryt[1]);
$queryt[1] = str_replace(";", "", $queryt[1]);
$queryt[1] = str_replace(":", "", $queryt[1]);
$queryt[1] = str_replace("script", "", $queryt[1]);
$queryt[1] = str_replace("http", "", $queryt[1]);
$queryt[1] = str_replace("www", "", $queryt[1]); //qualsiasi altra regola di str_replace è possibile inserirla in qualsiasi di queste righe dentro i tag {}
$queryt[1] = str_replace(".", "", $queryt[1]);
$queryt[1] = str_replace("/", "", $queryt[1]);
$queryt[1] = str_replace("'", "", $queryt[1]);
$queryt[1] = str_replace("?", "", $queryt[1]);
$queryt[1] = str_replace(".php", "", $queryt[1]);
$queryt[1] = str_replace("=", "", $queryt[1]);
$queryt[1] = str_replace("%", "", $queryt[1]);
$queryt[1] = str_replace("!", "", $queryt[1]);
$queryt[1] = str_replace("(", "", $queryt[1]);
$queryt[1] = str_replace(")", "", $queryt[1]);
//e dopo i rimpiazzamenti, ogni variabile riprende il suo posto ma senza la presenza di qualsiasi simbolo appena citato
${"$queryt[0]"} = "$queryt[1]";
}
//tutti i vari unset per sicurezza
//////////////////////////////////$_GET////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////$_GET////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
a questo punto se avevamo inserito questa url
Codice PHP:
index.php?variabile=on:lo&star=yes
proviamo a stampare a video il contenuto, vedremo che per esempio i due punti sono stati eliminati
Codice PHP:
echo "$variabile
e $star";
e quindi $variabile visualizzerà onlo anzichè on:lo
su un contenuto come quello di prima
forum=1%2B%255BPLM=0%255D%255BN%255D%2BGET%2Bhttp://www.si ecc.....
sarebbe impossibile sfuggire al controllo e quindi al rimpiazzamento delle
%,=,http,:,/
il vantaggio di questo codice?
è che è dinamico, nel senso che non va a regolarizzare come quasi sempre accade, solo una o un gruppo di variabili inserite da $_Get, ma tutte, anche quelle sconosciute allo script che poi andremmo a realizzare.
l'unico problema?
beh potrebbe succedere che per esempio $variabile ci serva per far passare un url o cose del genere, anche se ciò non dovrebbe essere fatto, in quel caso potremmo fare un if() di controllo per le variabili a cui non fare il check()
che ne pensi? può evitare anche molti XSS e script injection via url?
datemi un vostro parere