- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi di sicurezza su db
-
E come faccio ad eseguire questi controlli?
-
Potresti cominciare a utilizzare la funzione mysql_real_escape_string sulle variabili che utilizzi nelle query.
-
Qualcuno saprebbe indicarmi quali sono i controlli e come effettuarli per evitare le sql injection?
Per il momento ho filtrato il codice che accetto dall'utente da tutti i caratteri speciali ; -- + ' ( ) = > < @ e poi i comandi SQL SELECT, INSERT, CREATE, DELETE, FROM, WHERE, OR, AND, LIKE, EXEC, SP_, XP_, SQL, ROWSET, OPEN, BEGIN, END, DECLARE.
Ma cosa altro posso fare?
-
Come ho scritto prima, basta usare la funzione* *mysql_real_escape_string di PHP:
[php]$sql = 'INSERT INTO tabella SET campo=''.mysql_real_escape_string($valore).''';[/php]
-
ciao a tutti,
credo di avere anch'io lo stesso problema, per questo vi scriverei il codice che ho utilizzato per pubblicare il form sul sito. Riuscireste gentilmente ad indicarmi dove scrivere esattamente la funzione mysql_real_escape_string?$dbcnx = @mysql_connect('server', 'user', 'password');
if (!$dbcnx) {
exit('<p>Unable to connect to the ' .
'database server at this time.</p>');
}if (!@mysql_select_db('m5761d1')) {
exit('<p>Unable to locate the newsletter ' .
'database at this time.</p>');
}$name = $_POST['name'];
$email = $_POST['email'];
$sql = "INSERT INTO user SET
name='$name',
email='$email'";
if (@mysql_query($sql)) {
echo '<p>Newsletter sottoscritta</p>';
} else {
echo '<p>Error adding new user: ' .
mysql_error() . '</p>';
}?>
Grazie dell'aiuto.
ciao
Alex
-
Puoi modificare queste due righe:
[php]$name = $_POST['name'];
$email = $_POST['email'];[/php]In questo modo:
[php]$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);[/php]
-
Grazie matmattia,
provvedo ad aggiornare lo script.
ciao
Alex
-
Ciao ancora,
ho inserito il codice e tutto sembra funzionare correttamente, ora vorrei aggiungere un controllo al campo mail che mi permetta di rifiutare una mail non valida. Qui nel forum ho trovato un codice di questo genere:controllo campo email - email valida
if (!ereg("@",$UserEmail)){
echo "<h3>Errore!</h3>
Deve inserire una email validaLa preghiamo di <A HREF="javascript:history.go(-1)">tornare indietro e correggere</A>. Grazie";
exit;
Mi sapreste dire se è corretto e dove inserirlo rispetto al codice precedente?
Grazie ancora per l'aiuto
-
Quel codice controlla (neanche nel modo migliore) se esiste la chicciola nella stringa.
Subito prima del codice che ti ho modificato prima puoi mettere:
[php]if(!isset($_POST['email']) || !is_string($_POST['email']) || trim($_POST['email'])=='' || !eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$",$_POST['email'])){
echo '<h3>Errore!</h3><p>Deve inserire una email valida.<br />La preghiamo di <a href="#" onclick="history.go(-1);return false;">tornare indietro e correggere</a>. Grazie</p>';
exit();
}[/php]Fai qualche controllo perché non l'ho testato.
-
Ciao Matmattia,
finalmente ho provato ad inserire il codice di controllo che tu mi hai suggerito, ed effettivamente funziona correttamente, però, sia che la mail sia corretta che no, mi da sempre questa frase rpima della conferma della sottoscrizione della newsletter:Deprecated: Function eregi() is deprecated in D:\Programmi\wamp\www\provenewsletter\newuserdbesterno.php on line 26
Newsletter sottoscrittasapresti dirmi dove sta l'errore?
Tieni presente che ho fatto questa prova su localhost, non so se è questo che comporta il problema.
Grazie ancora.
ciao
Alex
-
Il problema è che la funzione eregi è deprecata dalla versione 5.3.0.
Potresti risolvere modificando il codice in questo modo:
[php]if(!isset($_POST['email']) || !is_string($_POST['email']) || trim($_POST['email'])=='' || !preg_match("#^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$#",$_POST['email'])){
echo '<h3>Errore!</h3><p>Deve inserire una email valida.<br />La preghiamo di <a href="#" onclick="history.go(-1);return false;">tornare indietro e correggere</a>. Grazie</p>';
exit();
}[/php]
-
Grazie matmattia,
adesso sembra che funzioni tutto correttamente.
Alla prossima.
Ciao
Alex