Newsgroup: it.comp.www.php
Titolo: se uso una regexp invece di $mysql->real_escape_string

Ciao a tutti
ho tentato di applicare questa query:
$query = mysql_query("SELECT username FROM utenti WHERE
username='$mysql->real_escape_string($username)' AND 
PASSWORD='$mysql->real_escape_string($password)' ");
ma probabilmente la versione PHP del server 
aruna.it
 non supporta 
$mysql->real_escape_string($password)
Vorrei pertanto sapere se io in fase di verifaica dei dati immessi uso:
var filterpass = /^[a-zA-Z0-9]*$/;
if (!filterpass.test(f.password.value))
{alert("Nella password possono essere digitati solo lettere o numero");
return false;}
secondo voi raggiungo lo stesso risultato anche in sicurezza?
Grazie

 PASSWORD='$mysql->real_escape_string($password)' ");
Togli "$mysql->" e vedrai che funziona!
Utilizzare funzioni specifiche del database di consente di escapare 
tutti i caratteri "dannosi" per la query sql. Ovviamente puoi risolvere 
con una regexp e simili ma, in tal caso, devi conoscere con esattezza i 
caratteri da evitare.
Un conto è codificare correttamente i caratteri che "disturbano il db" 
un conto è evitare tutti i caratteri tranne lettere e numeri.
	Francesco

 username='$mysql->real_escape_string($username)' AND
Dove hai trovato questa sintassi? (potrebbe essere una libreria).
La funzione "ufficiale" e` mysql_real_escape_string()
Bye.

 Grazie
ad ogni modo la verifica dati va fatta sempre sul server.
Ciao


Forse si riferiva a mysqli, mysqli->real_escape_string()
	Francesco

Scusate ma se uso
$username='mysql_real_escape_string($username)'
$username è vuoto
www.php.net
 dice che mysql_real_escape_string è PHP 5 mentre 
aruba.it
 usa il 
4 e rotti
cosa posso fare in alternativa?
Grazie

 usa il 4 e rotti
[quoto 
http://www.php.net/mysql_real_escape_string
]
mysql_real_escape_string
(PHP 4 >= 4.3.0, PHP 5, PECL mysql:1.0)
[/quoto]
Esiste da PHP 4.3.0 rilasciato il 27 dicembre 2002. Se il tuo provider
utilizza un versione di PHP che non supporta mysql_real_escape_string,
ossia una versione di oltre 5 anni fa, forse e' meglio se cambi
fornitore.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 
Mysqli (nota la i finale) è php5, mentre le funzioni mysql_* sono 
disponibili da lustri :-)
Comunque, come ti ho già scritto, stai confondendo l'uso 
dell'escape_string con la validazione:
$a = "L'anno";
echo mysql_real_escape_string($a) ==> L\'anno
$a = "";
echo mysql_real_escape_string($a) ==> ##NIENTE##
	Francesco

allora
Il mio codice che non lavora č:
$username = $_POST['username'];
$password = $_POST['password'];
$query ="SELECT * FROM passwords WHERE
username='mysql_real_escape_string($username)' AND 
password='mysql_real_escape_string($password)' ";
HO PROVATO anche :
$username =mysql_real_escape_string( $_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
ma mi danno due stringhe vuote
$query ="SELECT * FROM passwords WHERE
username='$username' AND password='$password' ";
in quest'ultimo caso la QUERY č VUOTA E IL SERVER PROVATO IN UN SITO 
internet DOVE IL OS č LINUX MI RISPONDE
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 
'/var/lib/mysql/mysql.sock' (2) in 
/web/htdocs/
www.pippo.it/home/admin/real.php
 on line 6
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A 
link to the server could not be established in 
/web/htdocs/
www.pippo.it/home/admin/real.php
 on line 6
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 
'/var/lib/mysql/mysql.sock' (2) in 
/web/htdocs/
www.pppppppp.it/home/admin/real.php
 on line 7
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A 
link to the server could not be established in 
/web/htdocs/
www.pppppppppppppp.it/home/admin/real.php
 on line 8
MENTRE PROVATO DOVE IL OS č WINDOWS NON RISPONDE NULLA MA LA PASSWORD E 
L'USERNAME NELLA QUERY SONO SEMPRE VUOTE

 /web/htdocs/
www.pippo.it/home/admin/real.php
 on line 6
Questo significa che il server e` mal configurato.
Segnala l'errore al gestore.
Bye.


Non e' che ancora non ha aperto la connessione al db ?
a me su Aruba funziona.

 a me su Aruba funziona.
mi stai dicendo che prima bisogna connettersi al server mysql e che detta 
funzione da sola non lavora? ??
<?PHP
$username = "Hallo Paolo's";
$password = "pippo's";
$password = mysql_real_escape_string($password);
$username = mysql_real_escape_string($username);
print ($username);
print ($password);
?>
Infatti questo script mi segnala l'errore su indicato il problema però non 
si risolve aprendo prima la connessione
Hai qualche idea supplementare?
Grazie



Puo` essere, ma l'errore in questo caso sarebbe molto fuorviante, perche` 
dice testualmente "non riesco a connettermi a MySQL attraverso il socket", 
quindi sembra che MySQL non sia configurato per accettare connessioni in 
locale.
Se Aruba usa un server MySQL remoto, puo` essere che 
mysql_real_escape_string() tenti la mysql_connect() da solo con parametri 
standard (localhost, root, nessuna password) e quindi non trovi il server, 
ma non ho mai provato a farlo :)
Bye.

 trovi il server, ma non ho mai provato a farlo :)
provato;)
questo il risultato senza connessione aperta:
$a= mysql_real_escape_string('stringa di prova');
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket '/var/lib/mysql/
mysql.sock' (2) in /web/htdocs/xxx/home/test2.php on line 4
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
A link to the server could not be established in /web/htdocs/xxx/home/
test2.php on line 4
dove altrimenti funge
ciao

 Hai qualche idea supplementare?
sorry, a parte assicurarsi che sia una connessione valida, non saprei

 
"Sembra di si" non è corretto; basta leggere il manuale e abbiamo la 
risposta:
string mysql_real_escape_string ( string unescaped_string [, resource 
link_identifier] )
[skip]
link_identifier: The MySQL connection. If the link identifier is not 
specified, the last link opened by mysql_connect() is assumed. If no 
such link is found, it will try to create one as if mysql_connect() was 
called with no arguments. If by chance no connection is found or 
established, an E_WARNING level warning is generated.
	Francesco

 risposta:
grazie per avermelo ricordato, anche se non ne' avevo bisogno (perlomeno 
questo)
avevo messo il "sembra" solo per essere meno... brutale

$password = mysql_real_escape_string($password);
Esatto, perche' AFAIK deve chiedere al server com'e' configurato (charset,
ecc.) per poter fare l'escaping corretto.
Leonardo
--
The stars have not dealt me the worst they could do:
My pleasures are plenty - my troubles are two.
But oh!, my two troubles, they reave me of rest: