Newsgroup: it.comp.www.php
Titolo: help password e PHP

ciao ho un problemino...
con questa routine dovrei verificare nome utente e password in realt� fa 
entrare cani e porci....
grazie
---
<?php
session_start();
include 'config.php';
if (isset($_POST['user'])) {
 $user=$_POST['user'];  $pwd=$_POST['pwd'];
  $query="SELECT * FROM utenti WHERE user=$user AND pwd=md5($pwd)";
  $dbResult=mysql_query($query,$db);
  $AffectedRows=mysql_affected_rows($db);
  if ($AffectedRows==0){
    header('location:login_failed.php');
   } else {
        $_SESSION['user']=$user;
     header('location:home.php');
  }
  }
?>
-- 

   }
} else {
 header('Location: login_failed.php');
}
altrimenti basta non passare lo user in POST e andare avanti.
Poi in ogni pagina dovresti controllare che la variabile in sessione sia 
corretta.
Bye.

 corretta.
Il controllo della variabile di sessione c'� grazie.
Ho fatto le tue modifiche ma il problema c'� ancora. Ho provato ad eliminare 
cookie e il resto.
controller� con calma
grazie mille e ciao

Questo per evitare injection.
No, cosi' e' sbagliato (di sicuro e' superfluo).
	AND pwd=' . md5($pwd) . "'";
...altrimenti qualsiasi password contenente caratteri "strani" rischia di
non essere riconosciuta (vabbe' che, se la stessa funzione e' usata anche
per l'inserimento, due torti fanno un diritto :-) ).
Leonardo
-- 
The cock doth craw, the day doth daw,
the channerin' worm doth chide:
gin we be mist oot o' oor place,
a sair pain we maun bide.


[CUT]
Alessandro e Leonardo, intanto vi ringrazio per l'aiuto.
Quella routine di verifica credevo di averla testata ed era stata inserita 
in progettino per l'universit�. Evidentemente anche i docenti non l'hanno 
testata seriamente.
Nonostante i vostri consigli non funziona. pianpianino la ricostruisco passo 
passo.
intanto ancora grazie 

>> entrare cani e porci....
ho trovato l'errore, il mysql_num_rows lo passano sulla variabile sbagliata 
$db anzich� $dbResult!!
$dbResult=mysql_query($query,$db);
 $AffectedRows=mysql_num_rows($dbResult);
grazie ancora 

 ($user)."' AND pwd='" .md5(mysql_real_escape_string($pwd))."'";
Perch� fare l'escape anche di un valore di cui si deve ricavare l'md5?
Non che faccia male, eh, ma lo trovo ridondante.
-- 
ValeRyo
XT600 "Katoki Pajama" - 
http://www.slimmit.com/go.asp?7Y9
CBR600F "Cerbero" - In vendita - 
http://www.slimmit.com/go.asp?7X0
GamerTag: 
http://card.mygamercard.net/IT/nxe/ValeRyo76.png
 

 testata seriamente.
Non ï¿œ una novitï¿œ ;-)

 Non che faccia male, eh, ma lo trovo ridondante.
Eh, ma che puntigliosi che siete!! :P
L'ho scritto per abitudine (o paranoia, come preferisci chiamarla). :)
Ma in realta` ha ragione Leonardo. Potrebbe dare problemi a chi usa 
caratteri strani tipo le barre o gli apostrofi nelle password, quindi 
meglio non metterlo.
Bye.

 
di fatti quel pezzo di codice e' un esempio da NON seguire
la tanella utenti ha lo user unico
quindi
"SELECT * FROM utenti WHERE user='".mysql_real_escape_string($user)."';";
if($row[pass] === md5($_POST['merdata'])){
  $_SESSION['loggato'] = 'VERO';
}else{
  $_SESSION['loggato'] = 'FALSO';
}

if($row[pass] === md5($_POST['merdata'])){
Cosi' pero' consenti di distinguere fra il caso in cui un utente esiste ma
la password e' sbagliata ("loggato = FALSO") e il caso in cui l'utente non
esiste ("Error: object is not an array" visto che $row[pass], virgolette a
parte, non esiste proprio).


 
non 6 tenuto a dire se l'utente esiste, tanto la risposta e' sempre
login non valido (il server sa se esiste) ma l'utente dall'altra parte
no ci aggiungi un po di controrno $row['pass'] = ""; prima quindi
diventa array almeno si evitano caisini peggiori

diventa array almeno si evitano caisini peggiori
Mi sono espresso male. Intendevo dire che il tuo codice consente
all'utente di distinguere fra i due casi
	(a) l'utente esiste e la password e' sbagliata
	(b) l'utente non esiste
perche', nel primo caso, da' errore comandato dal back-end e nel
secondo caso compare un errore di PHP, visto che $row non era un
array.
Aggiungere $row['pass'] = '' e' una buona idea ma devi farlo nel
caso in cui la query fallisca; ora, visto che la query fallisce,
sai gia' che l'utente non c'e', quindi tanto vale dare errore in
quel punto comunque, come nel codice di Alessandro e Andrea.
Oh, e' giusto per essere pedante, eh [*].
Leonardo in fase ritentiva anale
[*] poi tu sapessi che casini faccio *io*... :-)
