- Home
- Categorie
- Coding e Sistemistica
- PHP
- AIUTO: come proteggersi da sql innection?
-
AIUTO: come proteggersi da sql innection?
Salve ragazzi, ho un aiuto disperato , chi mi puo aiutare per capitre come devo fare per proteggermi da questa cosa, pensavo che fare cosi:
$msp=htmlentities($_POST['msp']); <input type="text" name="msp" size="40">
Per favore, mi potete aiutare?
-
Ciao angelo85ct,
puoi usare la funzione mysql_real_escape_string.
-
Mi basta usare questa per ogni campo input?
In questo modo dovrei risolvere?
-
Si è sufficiente usarlo per i valori che passerai poi alla query.
-
Secondo te, il fatto che utilizz i GET invece dei POST potrebbe essere un suggerimento a chi volesse effettuare operazione di SQL Injection?
Cioè il fatto che vedano i nomi delle variabili passate può sevirgli da aiuto?
-
Chi è capace di sfruttarla è capace di farla indifferentemente se è GET o POST, in fondo non vi è alcuna difficoltà in un operazione simile.
-
Ciao, ti volevo chiedere un consiglio, se ho un campo input cosi:
[PHP]<input type="text" name="msp" size="40">[/PHP]
e faccio le seguente funzione in php:
[PHP]
function Formatta($campo) {
$campo=htmlentities($campo);
$campo=mysql_real_escape_string($campo);$campo=ereg_replace(";"," ",$campo);
$campo=ereg_replace("--"," ",$campo);
$campo=ereg_replace("+","piu",$campo);
$campo=ereg_replace("'"," ",$campo);
$campo=ereg_replace("("," ",$campo);
$campo=ereg_replace(")"," ",$campo);
$campo=ereg_replace("="," ",$campo);
$campo=ereg_replace("<"," ",$campo);
$campo=ereg_replace(">"," ",$campo);
$campo=ereg_replace("@"," ",$campo);$campo=ereg_replace("select"," ",$campo);
$campo=ereg_replace("insert"," ",$campo);
$campo=ereg_replace("create"," ",$campo);
$campo=ereg_replace("delete"," ",$campo);
$campo=ereg_replace("from"," ",$campo);
$campo=ereg_replace("where"," ",$campo);
$campo=ereg_replace("or"," ",$campo);
$campo=ereg_replace("and"," ",$campo);
$campo=ereg_replace("like"," ",$campo);
$campo=ereg_replace("exec"," ",$campo);$campo=ereg_replace("sp_"," ",$campo);
$campo=ereg_replace("xp_"," ",$campo);
$campo=ereg_replace("sql"," ",$campo);
$campo=ereg_replace("rowset"," ",$campo);
$campo=ereg_replace("oper"," ",$campo);
$campo=ereg_replace("begin"," ",$campo);
$campo=ereg_replace("end"," ",$campo);
$campo=ereg_replace("declare"," ",$campo);
$campo=ereg_replace("update"," ",$campo);
$campo=ereg_replace("*","per",$campo);
}[/PHP]
[PHP]Formatta($msp);[/PHP]
questa potrebbe andare bene come soluzione?
-
È sufficiente utilizzare mysql_real_escape_string, fare tutte quelle operazioni è inutile.
-
Altra cosa, molti siti usano questo: dotdefender Blocked Your Request.
Mi sapete dire cosa è?
-
@Thedarkita said:
È sufficiente utilizzare mysql_real_escape_string, fare tutte quelle operazioni è inutile.
Ciao, io questa soluzione l'ho provata, pero' mi sono accorto che nel caso in cui un utente invii un mess e ci sonio degli apici e dei br, il messaggio che arriva è un po incomprensibile.
Lo stesso problema ce l'ho se nell'url passo una parola tipo
sant'alfio, nel db è memorizzata cosi, ma se faccio mysql_real_escape_string mi mette \ e poi non mi cerca nel db, secondo te dovrei memorizzare le parole nel db con '?Ciao e grazie
-
Allora la funzione va utilizzata correttamente, esempio:
[php]
$a = $_POST['variabile']; // Input$query("INSERT INTO tabella(campo) VALUES('".mysql_real_escape_string($a)."')");
[/php]Per quanto riguara il codice html, puoi o convertirlo nelle rispettive entità html tramite la funzione htmlentities e averlo cosi come testo, o rimuoverlo con la funzione strip_tags.
-
Un'ultima cosa, se io la connection la metto nell'index, e non la chiudo mai, la connessione sta sempre aperta, qualsiasi pagina del sito visualizzo, facendo cosi, è possibile che tramite un form per l'invio di email, se non ho alcun controllo , per levare parole strane, possano accedere al db, conoscendo nome delle tabelle, e nome database?
Te lo chiedo, perche' uso il php da auto didatta, e mi ero fatto un piccolo sito tanto per imparare, ma mi hanno cancellato tutte le tabelle.
-
La connessione viene chiusa automatica al termine dell'eseuzione dello script, il form di invio email non credo utilizzi il database.
Lanciare una query di drop in questa maniera mi sembra comunque piuttosto difficile, probabilmente il problema è altrove.
-
Allora sarà stato da qualche get dell'url.
Altra cosa, ho messo online una demo del mio pannello:
provademopannell . altervista. org/ index .phpTu ne capisci di sql innection? Riesci ad entrare nel mio pannello?