PHP e SQL Injection

Stato
Discussione chiusa ad ulteriori risposte.

imported_robertino

Utente Silver
8 Ottobre 2010
0
0
0
52
Salve ragazzi
fino ad ora da autodidatta ho fatto qualche sito, ma mi sono accorto che la mia programmazione non è eccezionale e avrei bisogno di qualche aiuto!

Sull'apertura della connection e sulla chiusura delle query: di solito io uso fare un file connection.php. dove al suo interno metto questo:
Codice:
mysql_connect("host","user","pass") or die (mysql_error()); 
mysql_select_db("database") or die (mysql_error());

poi questo file lo includo nella index.php

Le query invece le strutturo così:
Codice:
$com1=mysql_query("SELECT comune FROM comune WHERE id_comune='$stringa' "); 
$com11=mysql_fetch_array($com1);

E' giusto fare cosi? Come devo fare per fare una corretta programmazione??

Inoltre come posso fare in modo da proteggermi quando utilizzo il GET nell'url?
Perché mi sono accorto che se ho un url del tipo:
index.php?page=1&ciccio=726
dopo l'uguale possono mettere una qualunque query e far quello che vogliono!

Se infatti l posto ddi 726 metto
index.php?page=1&ciccio=''
la query mi da un sacco di errori .

Come risolvere?
Mi potreste dare qualche consiglio?

Grazie!
 
Cercati qualcosa sulle SQL injection (e come prevenirle), e informati bene. Tieni sempre e comunque a mente che passare l'user input ad un altro sistema (quale un DBMS) senza alcun controllo equivale ad appendersi per il collo.
 
meh. ha detto:
mysql_real_escape_string

Esatto, ho provato a utilizzare tale mysql_real_escape_string, però questo mi toglie eventuali <br> presenti nell'area di testo, le è me le trasforma in &egrave; quindi come faccio per la visualizzazione?

Se utilizzo mysql_real_escape_string all'interno di un form email i messaggi arrivano in maniera incomprensibile, come trattarli?

Utilizzando mysql_real_escape_string basta a proteggermi della SQL Injection?
 
robertino ha detto:
meh. ha detto:
mysql_real_escape_string

Esatto, ho provato a utilizzare tale mysql_real_escape_string, però questo mi toglie eventuali <br> presenti nell'area di testo, le è me le trasforma in &egrave; quindi come faccio per la visualizzazione?

Se utilizzo mysql_real_escape_string all'interno di un form email i messaggi arrivano in maniera incomprensibile, come trattarli?

Utilizzando mysql_real_escape_string basta a proteggermi della SQL Injection?

http://it.php.net/manual/en/function.mysql-real-escape-string.php

Se vengono convertiti anche i robi HTML lo stai facendo sbagliato.
 
Ascolta, io di solito associo ciò che viene dal form ad una variabile, di questa variabile faccio mysql_real_escape_string e poi lo utilizzo per eventuali INSERT o SELECT.

Dite e sbagliato fare così?
Devo fare mysql_real_escape_string necessariamente all'interno di una SELECT come nel link da te postato?
 
robertino ha detto:
Ascolta, io di solito associo ciò che viene dal form ad una variabile, di questa variabile faccio mysql_real_escape_string e poi lo utilizzo per eventuali INSERT o SELECT.

Dite e sbagliato fare così?
Devo fare mysql_real_escape_string necessariamente all'interno di una SELECT come nel link da te postato?

No, va bene come fai, ma mysql_real_escape_string leva semplicemente la roba che potrebbe portare ad SQL injections, non la roba che potrebbe portare ad xss o html injection.
 
Ma siccome si tratta di tratta di campi descrittivi, mysql_real_escape_string non leva anche i <br>, la è le trasforma in &egrave; o è stato un errore mio?
 
se usi htmlentities prima di trasferire la pagina e mysql_real_escape_string sei protetto al 100% con sql injection, xss e roba simile.
 
Se poi vuoi stare tranquillo al 100% ti conviene utilizzare variabili di numeri e non di testo che puoi tranquillamente "sanitizzare" con un bel int davanti.
 
Perfetto..quindi cerco di risistemare il tutto con:
htmlentities e mysql_real_escape_string

Quando dite che conviene usare variabili di numeri, vi riferite al fatto di usare nel GET una variabile numerica...verificare se è realmente un numero e poi andar avanti nel codice?
 
Stato
Discussione chiusa ad ulteriori risposte.