Newsgroup: it.comp.www.php
Titolo: SQL Injection

Leggendo il manuale php nella sezione relativa alla sicurezza dei db ho
notato che era possibile passare più di una query alla funzione
mysql_query() del tipo mysql_query("INSERT ...; INSERT ...;"). In realtà
non ci riesco poiche mi viene segnalato dalla funzione mysql_error() un
errore nella sintassi. Come mai?
PS.:
Le query sono corrette se le passo una alla volta funziona tutto bene.
Inviato da 
www.mynewsgate.net

 mysql_error() un errore nella sintassi. Come mai?
Posta il riferimento al punto esatto dove lo hai letto.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
http://www.php.net/manual/en/security.database.sql-injection.php
Inviato da 
www.mynewsgate.net

 
http://www.php.net/manual/en/security.database.sql-injection.php
Dove sta scritto esattamente?


 
Example 26-2
Inviato da 
www.mynewsgate.net

 Example 26-2
Questo:
<?php
$offset = argv[0]; // beware, no input validation!
$query  = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET
$offset;";
// with PostgreSQL 
$result = pg_query($conn, $query);
// with MySQL
$result = mysql_query($query);
?> 
Sei sicuro di aver letto bene?


 
Se continui nella lettura dell'esempio il manuale prevede la possibilità
che la variabile $offset che arriva via get o post assuma il seguente valore:
"0;
UPDATE user SET Password=PASSWORD('crack') WHERE user='root';
FLUSH PRIVILEGES;"
e che quindi la successiva chiamata alla funzione mysql_query() esegua due query
la seconda delle quali costiuisce l'sql-injection.
Inviato da 
www.mynewsgate.net

 esegua due query la seconda delle quali costiuisce l'sql-injection.
IMHO e chi ha scritto questa pagina ha accomunato pg_send_query a
pg_query ed a mysql_query. Infatti l'esempio riportato di SQL-Injection
con query multiple puo' avvenire solo con pg_send_query.
-- 
I am what I am, I do what I can


la seconda delle quali costiuisce l'sql-injection.
E' un problema per PostgreSQL, si'. Ma MySQL non mi sembra supporti - per
ora - le query multiple.
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio


Confermo io utilizzo MySql 4 e supporta le query multiple. (da non
confondersi con le query nidificate che invece dovrebbero essere
implementate solo dalla versione 5)

 implementate solo dalla versione 5)
Definisci "query multiple" e posta il codice utilizzato per il test.
-- 
I am what I am, I do what I can


 Definisci "query multiple" e posta il codice utilizzato per il test.
In effetti non sň se "query multipla" sia la definizione precisa; diciamo
che riesco a richiamare una sola chiamata a mysql_query passandole come
istruzione sql una serie di query separate dal punto e virgola che vengono
eseguite in cascata.
Un esempio dell'istruzione sql che posso far eseguire č:
SELECT @Tempo:=Tempo, @Velocita:=Velocita FROM mytable WHERE Prog=1 AND
Prefisso='xyz'; UPDATE mytable SET Tempo=@Tempo, Velocita=@Velocita WHERE
Prefisso='xyz';

 e virgola che vengono eseguite in cascata.
Che versione di MySQL?
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 Che versione di MySQL?
Versione 4.0.13

 Versione 4.0.13
Hai fatto qualche modifica alla configurazione standard?
Potresti postare il codice php?
-- 
I am what I am, I do what I can


Hai fatto qualche modifica alla configurazione standard?
Oh, c'ha ragione lui, c'ha :-)
Provato ora sul mio: m'ero cosi' abituato a NON avercele, che non ci ho
neppure pensato.
Ma ci sono e funzionano:
mysql> select version(); select version();
+---------------------+
| version()           |
+---------------------+
| 4.0.20-standard-log |
+---------------------+
1 row in set (0.00 sec)
+---------------------+
| version()           |
+---------------------+
| 4.0.20-standard-log |
+---------------------+
1 row in set (0.00 sec)
mysql>


 mysql> select version(); select version();
Questa e' la shell di mysql, non certo una chiamata a mysql_query.
Solo in MySQL >= 4.1 e' possibile richiedere l'esecuzione di query
multiple con mysql_query etc. nelle versioni precedenti non era
possibile e comunque la richiesta deve essere esplicita.
[quoto 
http://dev.mysql.com/doc/mysql/en/C_API_multiple_queries.html
]
From version 4.1, MySQL supports the execution of multiple statements
specified in a single query string. To use this capability with a given
connection, you must specify the CLIENT_MULTI_STATEMENTS option in the
flags parameter of mysql_real_connect() when opening the connection.
You can also set this for an existing connection by calling
mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON)
[/quoto]
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 [/quoto]
Eseguo semplicemente:
mysql_connect($srv, $usr, $pwd)
mysql_query($istrSql)
Per quanto riguarda le opzioni che hai riportato (CLIENT_MULTI_STATEMENTS e
MYSQL_OPTION_MULTI_STATEMENTS_ON) sinceramente non le ho impostate, se sono
impostate lo sono di default! (ps: come posso verificare se
MYSQL_OPTION_MULTI_STATEMENTS_ON è settata?)

 MYSQL_OPTION_MULTI_STATEMENTS_ON h settata?)
Sono impostazioni che vengono passate tramite mysql_real_connect o
impostate tramite mysql_set_server_option.
Su MySQL 4.0.18 l'esecuzione di query multiple non funziona.



:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 Su MySQL 4.0.18 l'esecuzione di query multiple non funziona.
Ok... sono d'accordo con te.
Adesso mi resta solo da capire perchè a me funzionano!!!!
Non appena ne vengo a capo riposto