Ragazzi qualcuno ha modo di spiegarmi questo problema ? leggevo che è importante per difendere i dati del database del proprio sito, ma non riesco a capire le guide in inglese sul cosa fare.
Ragazzi qualcuno ha modo di spiegarmi questo problema ? leggevo che è importante per difendere i dati del database del proprio sito, ma non riesco a capire le guide in inglese sul cosa fare.
Qui è spiegato in italiano: https://it.wikipedia.org/wiki/SQL_injection
In generale, sicuramente eviti il problema usando i Prepared Statements.
Altrimenti qualsiasi dato prelevato da esterno devi farlo "passare" per la escape_string()
Ciao!
regolamento altervista_______________ regolamento forum
Quindi ho programmato male tutte le sql, andando a fare un confronto con quel codice rispetto al mio :
Codice PHP:
$infoAutore=array(
'id' => $logutenti['idUtente'],
'nome' => $logutenti['utente'],
'icoView' => $logutenti['icoView']
);
$rowUpdate="UPDATE t_utenti SET
prigioni='".$infoAutore['id']."',
prigioniMotivo='".$arresto['motivo']."',
prigioniData=NOW()
WHERE idUtente='".$arresto['idUtente']."' ";
Ultima modifica di exlot : 22-01-2018 alle ore 20.33.50
Dipende come prelevi i dati $logutenti, $infoautore e $arresto. Se prima fai il controllo tramite escape, non c'è problema.
Ciao!
regolamento altervista_______________ regolamento forum
tipo questo ? come dovrei correggerlo ? non riesco a capireCodice PHP:
$arresto=array(
'idUtente' => $_POST['id'],
'gogna' => $_POST['gogna'],
'motivo' => $_POST['motivo'],
);
Esatto, quello non va bene. Quali funzioni utilizzi per l'interazione con il database?
Dovresti prima effettuare l'escape dei vari dati.
Ciao!
regolamento altervista_______________ regolamento forum
sono vecchio stile, vero ?Codice PHP:
mysql_connect($server,$serverUser,$serverPsw) or die (mysql_error());
mysql_select_db($database) or die (mysql_error());
Molto vecchio, direi troppo perché quelle funzioni sono ormai obsolete. Dovresti passare a mysqli o PDO.
Nel frattempo, ogni volta che prelevi un dato da $_POST o comunque da utente, fai una cosa del genere:
Ciao!Codice PHP:
$arresto=array(
'idUtente' => mysql_escape_string($_POST['id']),
'gogna' => mysql_escape_string($_POST['gogna']),
'motivo' => mysql_escape_string($_POST['motivo']),
);
regolamento altervista_______________ regolamento forum
ok, aggiorno subito tutti i post. Che mi consigli di usare per fare la connessione al db ?
ho imparato la lezione ovviamente, ma sto cercando di capire quale filtro sanitizza il testo senza rovinare tutti i caratteri. Qualcuno sa dirmi quale filtro va usato per non rovinare ' " < > e tutti i caratteri particolari?
FILTER_SANITIZE_STRING ho provato lui ma rovina < > " '
Se il problema è ancora quello di cui parlavi all'inizio della discussione, la soluzione pure è sempre la stessa: i prepared statements.
Se, invece, nel frattempo è cambiato qualcosa e ora stai lavorando con i filtri per altri motivi, puoi fare riferimenti alla documentazione sui sanitize filters.
Ultima modifica di mzanella : 18-12-2018 alle ore 20.51.23 Motivo: Corretto uno dei link
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
a parte che il link è uguale. no no, il problema è che dopo aver sanitizzato tutto, non riesco ad individuare il tipo di filtro adatto a TESTO GENERICO...
Ho corretto il primo link
Non c'è un filtro specifico per un testo generico, proprio perché è generico. In generale dovresti lasciare il testo così com'è e lasciare il compito di prevenire le SQL Injection ai prepared statements.
A meno che tu non abbia, per altri motivi, delle richieste specifiche su cosa rimuovere/modificare, in quel caso si può cercare il filtro più adatto.
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
è una programmazione in OGGETTI esatto? io sto programmando nell'altro metodo... Potresti fare un esempio di una semplice insert sanitizzata bene? o.o
No, non è una funzionalità esclusiva della programmazione ad oggetti.
Di esempi ce ne sono anche nella documentazione ufficiale, eccone comunque uno:
Codice PHP:
$link = mysqli_connect("localhost", "USER", "PASSWORD", "DATABASE");
if (mysqli_connect_errno()) {
die(mysqli_connect_error());
}
$stmt = mysqli_prepare($link, "INSERT INTO tabella(colonna1, colonna2) VALUES(?, ?)");
if (!$stmt) {
die("Preparazione statement fallita");
}
$valore1 = "stringa qualunque";
$valore2 = 5;
mysqli_bind_param($stmt, "si" $valore1, $valore2);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.