Come già scritto serve un approccio multiplo.
Per trovare i ; basta... cercarli come sottostringa.
Poi i token SQL che, in realtà, sono piuttosto pochi.
Gli apici
Come già scritto serve un approccio multiplo.
Per trovare i ; basta... cercarli come sottostringa.
Poi i token SQL che, in realtà, sono piuttosto pochi.
Gli apici
quindi scusa come elimino questo rischio?Originariamente inviato da Alhazred
Si, ma se nella variabile $id c'è dentro 5 OR 1
la query che generi è
select * from nometabella where id=5 OR 1
che equivale a un WHERE sempre verificato grazie al OR 1, in questo modo viene preso tutto il contenuto della tabella.
e nel caso di un login con nome utente e passwor?
Risolvi verificando cosa c'è in ogni variabile che andrà a far parte di una query.Originariamente inviato da lorenzo84
quindi scusa come elimino questo rischio?
e nel caso di un login con nome utente e passwor?
Se $id deve contenere un intero:
Codice PHP:if ( ! is_int($id) )
{
echo "Ehi, chi vuoi fregare? Devi darmi un numero intero!";
}
else
{
//la variabile va bene e puoi usarla nella query
}
si questo ci sono. Ma nel caso di un nome utente e pass che sono varchar come potrei risolvere?Originariamente inviato da Alhazred
Risolvi verificando cosa c'è in ogni variabile che andrà a far parte di una query.
Se $id deve contenere un intero:
Codice PHP:if ( ! is_int($id) )
{
echo "Ehi, chi vuoi fregare? Devi darmi un numero intero!";
}
else
{
//la variabile va bene e puoi usarla nella query
}
grazie mille a tutti per le risposte
Usa PDO, e te ne sbatti di qualsiasi SQL injection, perché ci pensa lui.
Per i dati inc hiaro o utilizzi il protocollo ssl, o i dati più sensibili (la password) li puoi criptare sul client e trasmetterli criptati, in sha1 per esempio: http://www.webtoolkit.info/javascript-sha1.html
scusa cosa è PDO?Originariamente inviato da Ranma2
Usa PDO, e te ne sbatti di qualsiasi SQL injection, perché ci pensa lui.
Per i dati inc hiaro o utilizzi il protocollo ssl, o i dati più sensibili (la password) li puoi criptare sul client e trasmetterli criptati, in sha1 per esempio: http://www.webtoolkit.info/javascript-sha1.html
e poi una volta criptati come faccio a inviarli? non conosco javascript. e li posso decriptare? io nel db inserisco le password in MD5.
PDO: http://php.net/manual/it/book.pdo.php
Beh è proprio li il vantaggio tu invii la password già criptata in MD5. Non serve avere conoscente estreme di javascript, basta fare una ricerca su google e cercare la funzione da implementare a codice.
si infatti generalmente uso script già pronti anche se voglio iniziare a conoscere questo linguaggio...Originariamente inviato da Ranma2
PDO: http://php.net/manual/it/book.pdo.php
Beh è proprio li il vantaggio tu invii la password già criptata in MD5. Non serve avere conoscente estreme di javascript, basta fare una ricerca su google e cercare la funzione da implementare a codice.
quindi potrei convertire la stringa prima di inviarla in chiaro? anche se lascia il tempo che trova perchè poi nel db comunque è salvata in md5 e quindi cambia poco no?
scusate ma ho provato a inserire il controllo con is_int ma non funziona. Cioè se scrivo:
DELETE FROM t9154_mail WHERE id=14 or 1
va avanti lo stesso..
if ( is_int($id) ) //controllo che id sia numerico
{
ok va bene
}
else
{
errore e si ferma.
}
però va avanti...
EDIT: ho risolto. sostituito is_int con is_numeric().
No, supponi questi scenari:Originariamente inviato da lorenzo84
...
quindi potrei convertire la stringa prima di inviarla in chiaro? anche se lascia il tempo che trova perchè poi nel db comunque è salvata in md5 e quindi cambia poco no?
1) password inviata in chiaro e conversione fatta sul server
tu utente inserisci username 'pippo' e password 'pippo' ed invii i dati.
Io malintenzionato intercetto la comunicazione e leggo
username -> pippo
password -> pippo
Ora posso fare il login tranquillamente anch'io con le tue credenziali.
2) password inviata criptata dal client e niente conversione sul server
tu utente inserisci username 'pippo' e password 'pippo' ed invii i dati.
Io malintenzionato intercetto la comunicazione e leggo
username -> pippo
password -> 0c88028bf3aa6a6a143ed846f2be1ea4
Ora io per il login inserirei 0c88028bf3aa6a6a143ed846f2be1ea4 come password, ma a questo punto non sarebbe corretta, perché il client ricodificherebbe questo in MD5 inviando in realtà
1b12fefbe423632ed041dd56f48ba47c
che non è la password corretta e quindi il login fallisce.