Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica
 Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila
 Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K
 Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...
 

AND password='$password'

- - - - -
  • Please log in to reply
21 replies to this topic

#1
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
Sal am adaugat AND password='$password' la $query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'"); la un script de login si imi da eroare That user doesn't exist!

Cum as putea sa o rezolv?

if ($username&&$password)
{

$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");

$numrows = mysql_num_rows($query);

if ($numrows!=0)
{

		while ($row = mysql_fetch_assoc($query))
		{
				$dbusername = $row['username'];
				$dbpassword = $row['password'];
				$activated = $row['activated'];

				if ($activated=='0')
				 {
				   die("Yor account is not yet active.Please check your email!");
				   exit();
				 }
		}

		// check to see if they match!
		if ($username==$dbusername&&md5($password)==$dbpassword)
		{

		 if ($rememberme=="on")
			setcookie("username", $username, time()+7200);
			else if  ($rememberme=="")
					 $_SESSION['username']=$username;
			header("Location: userarea.php");
			exit();
		}
		else
				echo "Incorrect password!";

}
else
		die("That user doesn't exist!");

}
  else
  die("Please enter a username and a password!");


#2
Alta_

Alta_

    Active Member

  • Grup: Members
  • Posts: 1,197
  • Înscris: 22.05.2007
Nu iti da nicio "eroare", iti afiseaza intocmai mesajul ales de tine, in situatia data. Corect ar fi sa modifici mesajul in: "utilizatorul cu parola respectiva nu exista". Poate asa iti dai seama si ce e gresit in rationamentul tau.

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Normal ca nu exista daca tu compari parola cu hashul ei md5.
Uita de varianta asta, pune la where doar userul si compari ulterior parola.

#4
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
In loc de AND am adaugat OR si merge.Functioneaza la fel de bine ca AND? sau nu functioneaza deloc.

Edited by lordofthewerpons, 12 July 2010 - 15:41.


#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
E ilogic sa folosesti OR. Problema e de ce vrei tu sa introduci acolo neaparat AND password = ...? Daca functioneaza de ce sa strici?

Edited by dani.user, 12 July 2010 - 15:54.


#6
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
Am vazut la php academy un video cu injection sql.
[ https://www.youtube-nocookie.com/embed/e4EYkoLlSq0?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]
Am putea sa imi implantez si eu in codul meu asa ceva?

#7
Puggy

Puggy

    New Member

  • Grup: Validating
  • Posts: 21
  • Înscris: 05.07.2010

 dani.user, on 12th July 2010, 16:02, said:

Normal ca nu exista daca tu compari parola cu hashul ei md5.
Uita de varianta asta, pune la where doar userul si compari ulterior parola.

Dani, dacă te uiți atent, el trece prin MD5 șirul venit de la utilizator, și-l compară cu hash-ul din baza de date, unde mă gîndesc că valoarea este deja hash-uită.

@lordofthewerpons:
Nu este o eroare. Cum spunea @Alta_ , rutina ta returnează ceea ce trebuie să returneze în cazul în care nu există înregistrarea în baza de date. Adică:

$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");

Mai sus spui așa: selectează-mi toate datele din tabela de utilizatori UNDE NUMELE ȘI PAROLA SĂ FIE EGALE CU CELE DATE DE UTILIZATOR.
Acuma, dacă interogarea asta nu returnează date, înseamnă că:
1. Ori nu ai un nume de utilizator în bază
2. Ori îl ai, însă parola pe care ai introdus-o nu este corectă

Este logic că-ți funcționează cu OR, fiindcă atunci el spune așa: selectează-mi toate datele din tabela de utilizatori UNDE NUMELE SAU PAROLA SĂ FIE EGALE CU CELE DATE DE UTILIZATOR. În cazul ăsta, doar una dintre părți trebuie să fie adevărată, deci, chiar dacă ai numele de utilizator, poți să introduci parola greșită, că el tot va returna linia cu utilizatorul găsit în baza de date.

AND:
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

OR:
1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

#8
boghy933

boghy933

    Member

  • Grup: Members
  • Posts: 702
  • Înscris: 16.10.2009
si eu sunt de parere cu dani.user.
@Puggy el trece prin md5 dupa ce selecteaza din database, daca nu am inteles eu gresit codul.

#9
Puggy

Puggy

    New Member

  • Grup: Validating
  • Posts: 21
  • Înscris: 05.07.2010

 boghy933, on 12th July 2010, 20:51, said:

si eu sunt de parere cu dani.user.
@Puggy el trece prin md5 dupa ce selecteaza din database, daca nu am inteles eu gresit codul.

Da, uite cum văd eu situația:

md5($password)==$dbpassword

Unde, variabila $password va conține text normal. Ea vine de la utilizator mă gîndesc.
Dar $dbpassword va conține un hash MD5, fiindcă ea vine din baza de date, nu? Cel puțin așa mi se pare logic.

Și acum văd de ce interogarea aia nu returnează nici un rînd. El și acolo ar trebui să facă ceva de genul:
AND password='".md5($password)."'


#10
sergiu_spooky

sergiu_spooky

    Senior Member

  • Grup: Senior Members
  • Posts: 3,738
  • Înscris: 23.06.2006
Ce sens are if-u ăsta? :))
// check to see if they match!
if ($username==$dbusername&&md5($password)==$dbpassword)


Dudes, e simplu. Omul nu face diferența între and și or.

1) Ai un tabel în baza de date. În el ai două coloane, nume și parolă. Parola e deja hash-uită. Din motive de securitate nu e ok să păstrezi parolele utilizatorilor. Așa că folosești o funcție de hashing, care ia un string oarecare și-l transformă în altul fără să se poată face operația inversă. În alte cuvinte tu nu păstrezi în baza de date parola userului, păstrezi ceva la care se poate ajunge doar cunoscând parola originală (pe care doar el o știe) și algoritmul de hashing.

2) Selectezi din baza de date utilizatorii care au numele și parola din baza de date egale cu cele introduse de utilizator în formularul de login, evident parola primită de la utilizator trecută prima prin algoritmul de hashing. Sistemul tău ar trebui să se asigure că nu există doi utilizatori cu același nume.

3) Dacă în urma query-ului s-a găsit o înregistrare în tabel atunci utilizatorul a introdus date corecte și este autentificat.
      
Bănui că oricine poate să înțeleagă algoritmul de mai sus. Când îl treci în cod corect te poți numi începător. Mult noroc!

#11
Puggy

Puggy

    New Member

  • Grup: Validating
  • Posts: 21
  • Înscris: 05.07.2010

 sergiu_spooky, on 12th July 2010, 21:59, said:

Ce sens are if-u ăsta? :))
// check to see if they match!
if ($username==$dbusername&&md5($password)==$dbpassword)

Da, corect, din moment ce interogarea aduce date, orice verificare ulterioară este inutilă. Doar că el în interogarea verifică dacă hash-ul din bază este egal cu textul simplu introdus de utilizator. Acolo trebuie să treacă variabila prin MD5, nu după.

#12
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
Am bagat ".md5($password)." inloc de $password si merge :D
MS baieti ca m-ati ajutat sa inteleg :)

Edited by lordofthewerpons, 13 July 2010 - 10:18.


#13
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
Am urmarit tot tutorialu ala si imi mai da o errorica Warning: mysql_num_rows() expects parameter 1 to be resource, string given in D:\xampp\htdocs\Me\login.php on line 18
pentruca la $query = mysql_query(......); am adaugat $query = sprintf(......);.
Am adaugat dupa $query = sprintf(......); cudul mysql_query($query); dar de geaba nu misca nimic.

#14
Alta_

Alta_

    Active Member

  • Grup: Members
  • Posts: 1,197
  • Înscris: 22.05.2007
Nu m-am uitat eu  prea atent caci momentan scriu de la un computer din epoca de piatra, dar pe scurt:

Selectul scris asa si anume cu verificare si de USER si de PAROLA simultan, nu iti va da posibilitatea sa deosebesti in cod (in cel scris de tine, desigur), situatia "user inexistent" de situatia "user existent, dar parola gresita". Pe ramura de "parola incorecta" nu se va ajunge niciodata, selectul nereturnand nici un rezultat, de la bun inceput. Tu daca iti tastezi gresit parola cand te logezi pe cine stie unde,  ti-ar conveni sa-ti afiseze mesajul "user inexistent" ?

Legat de afisarea variabilei $query, daca vrei sa folosesti sprintf(), probabil trebuie sa scrii:
sprintf($query);

#15
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008

 Alta_, on 13th July 2010, 14:18, said:

Nu m-am uitat eu  prea atent caci momentan scriu de la un computer din epoca de piatra, dar pe scurt:

Selectul scris asa si anume cu verificare si de USER si de PAROLA simultan, nu iti va da posibilitatea sa deosebesti in cod (in cel scris de tine, desigur), situatia "user inexistent" de situatia "user existent, dar parola gresita". Pe ramura de "parola incorecta" nu se va ajunge niciodata, selectul nereturnand nici un rezultat, de la bun inceput. Tu daca iti tastezi gresit parola cand te logezi pe cine stie unde,  ti-ar conveni sa-ti afiseze mesajul "user inexistent" ?

Legat de afisarea variabilei $query, daca vrei sa folosesti sprintf(), probabil trebuie sa scrii:
sprintf($query);
Si ce ar trebui sa fac acuma? cu problema user inexistent

Nu merge cu sprintf($query);
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in D:\xampp\htdocs\Me\login.php on line 16
ln 16 $numrows = mysql_num_rows($query);

Edited by lordofthewerpons, 13 July 2010 - 12:23.


#16
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008
Am rezolvat $query = mysql_query($query); :D

#17
Alta_

Alta_

    Active Member

  • Grup: Members
  • Posts: 1,197
  • Înscris: 22.05.2007

 lordofthewerpons, on 13th July 2010, 13:15, said:

Nu merge cu sprintf($query);
da, eu am crezut ca in $query pastrezi un sir de caractere ("SELECT FROM ..."); altfel nu vad la ce-ai fi vrut sa faci afisarea.

 lordofthewerpons, on 13th July 2010, 13:15, said:

Si ce ar trebui sa fac acuma? cu problema user inexistent
Sa citesti macar o data, toate mesajele de mai sus. Daca nelamurirea persista e indicat s-o iei pe alta cale.

#18
lordofthewerpons

lordofthewerpons

    Junior Member

  • Grup: Validating
  • Posts: 185
  • Înscris: 14.11.2008

 Alta_, on 13th July 2010, 17:27, said:

Sa citesti macar o data, toate mesajele de mai sus. Daca nelamurirea persista e indicat s-o iei pe alta cale.

La google tot daca nu existauserul sau parola gresita sau user gresit da aceeasi eroare  
Numele de utilizator sau parola introduse nu sunt corecte.

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate