sql con sprintf (cosa è ?)

Salve sto seguendo un tutorial avanzato , ma ho notato che le query  sono cosi:

$query = sprintf("SELECT password FROM login WHERE username = '%s' LIMIT 1",
      mysql_real_escape_string($username));

cosa vuol dire?.

percaso se uso come usano loro sono ad rischio di sQL injection?.

grazie,

avete idee perchè usano cosi su tutte le query anche insert e update....etc.

inviato 7 anni fa
luigi
X 0 X

as: questa:

$sql = sprintf("insert into login (username,password,email,actcode) value ('%s','%s','%s','%s')",
      mysql_real_escape_string($username), mysql_real_escape_string(sha1($password . $seed))
      , mysql_real_escape_string($email), mysql_real_escape_string($code));
risposto 7 anni fa
luigi
X 0 X

La funzione sprintf() serve a creare una stringa (nel tuo caso lo statement SQL) partendo da un'altra scringa che in certe posizioni contiene dei particolari segnaposti, ad esempio %s o %d. sprintf() sostituisce questi segnaposti con i dati che gli vengono passati, in modo da produrre una stringa "farcita" di dati, posizionati nei punti indicati dai segnaposto.

Esistono diversi segnaposto perché ciascuno è dedicato ad un particolare tipo di dato, ad esempio %s può ospitare una stringa, %d un numero intero, ecc..

per maggiori dettagli:

http://it2.php.net/sprintf

sprintf() può essere usato per creare le query SQL perché queste sono spesso basate su una struttura nota a priori nella queale vanno inseriti dei dati "dinamici", ovvero che cambiano ad esempio in base alle informazioni inserite dall'utente in un form.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

ok, per SQL injection (non so come si dice) invece va bene quel sistema lì?

ti passo i link : http://www.ineedtutorials.com/articles/complete-advanced-login-member-system-php-tutorial

grazie.

risposto 7 anni fa
luigi
modificato 7 anni fa
X 0 X

...

dicevo per evitarlo . sql injection....

risposto 7 anni fa
luigi
X 0 X

Per evitare l'SQL Injection bisogna applicare la funzione mysql_real_escape_string() ai dati provenienti dall'utente. sprintf() di per sè non risolve il problema.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Per evitare l'SQL Injection bisogna applicare la funzione mysql_real_escape_string() ai dati provenienti dall'utente. sprintf() di per sè non risolve il problema.

 :bye:

si ma questa:

$sql = sprintf("insert into login (username,password,email,actcode) value ('%s','%s','%s','%s')",
      mysql_real_escape_string($username), mysql_real_escape_string(sha1($password . $seed))
      , mysql_real_escape_string($email), mysql_real_escape_string($code));

in fondo ha sempre mysql_real_escape_string()  , quindi è giusto?

risposto 7 anni fa
luigi
X 0 X

si  :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda