dico che stai facendo un mega confusione!!!Originariamente inviato da Ophy94
Dici che è sufficente per proteggere un sito?
Cercherò di spiegartelo semplice semplice...
Le QUERY che si rivolgono al database all'interno dei nostri script vengono spessissimo formulate in maniera dinamica cioè è l'utente che direttamente o indirettamente stabilisce la formulazione della query:
a.) perchè invia i valori tramite un form (con metodo get o post)
b.) perchè invia attraverso la query string (con metodo get)
c.) perchè ha dei cookie salvati sul suo pc
Essendo che questi possono essere "controllati" dall'utente occorre assicurarci che qualsiasi cosa l'utente inserisce nella query (in maniera più o meno maliziosa) questa non assumi significati diversi da quel che ci si voglia attendere. Se invece l'utente riesce a far modificare il "significato" della query allora sta realizzando quella che si chiama sql injection.
Cosa fare??
Occorre:
1) assicurarci che ciò che proviene dall'utente è ciò che ci si attende di ricevere. A questo scopo ci sono vari metodi: validazione degli input tramite espressioni regolari e/o con apposite funzioni di php (isset, empty, is_int, is_numeric, etc etc.);
2) Immunizzare tutto ciò che proviene dal form con opportune funzioni. Quest'ultimo aspetto è quello che maggiormente è importante per difendersi dalle sql injection.
Spesso da un utente si ricevono (con metodo get, post, cookie) stringhe. queste possono contenere caratteri (', ", %, etc etc) e/o parole (NULL, DROP, etc etc) "pericolose".
Per evitare questi pericoli occorre filtrare opportunamente le stringhe provenienti dall'utente; questo genere di filtro viene detto ESCAPE. Come farlo?
Esistono due funzioni e una impostazione del php.ini
get_magic_quotes_gpc() è un'impostazione del php.ini che precede i simboli ' e " con un backslash alle variabili di tipo GET, POST COOKIE (da qui la sigla 'gpc');
addslashes() è una funzione di php che effettua l'escape delle stringhe;
mysql_real_escape_string() è una funzione che come addslashes effettual l'escape delle stringhe ma è maggiormente consigliata dato che è stata creata appositamente per lo scopo.
Quindi le stringhe in ingresso devono essere filtrate tenendo conto di quanto detto. Allo scopo ti riporto una stra-mega-famosa-funzione per effettuare l'escape delle stringhe tenendo conto di quanto detto
L'ho fatta molto breve... ma + o -Codice PHP:
<?php
function EscapeString($string)
{
//se è attiva get_magic_quotes_gpc
if(get_magic_quotes_gpc())
{
// rimuoviamo gli slash inseriti automaticamente
$string = stripslashes($string);
// e diamo come result la stringa filtrata con opportuna funzione
return mysql_real_escape_string($string);
}
//se non è attiva get_magic_quotes_gpc
else
{
// diamo come result la stringa filtrata con opportuna funzione
return mysql_real_escape_string($string);
}
}
?>
Per approfondire
http://www.mtxweb.ch/php_learn/?p=864
http://www.phpnews.it/corsi/corso-ph...ento-dei-dati/