Avatar billede Calle5463 Forsker
15. august 2011 - 10:36 Der er 17 kommentarer og
1 løsning

Hvad har jeg overset?

Jeg har følgende (C/P fra) kode - $result bliver 0:

function dbQuery($sql)  {
$result = mysql_query($sql) or die(mysql_error());
return $result;


$userName = $_POST['txtUserName'];  //type=text
$password = $_POST['txtPassword'];  //type=password


$sql = "SELECT user_id
        FROM tbl_user
        WHERE user_name='$userName' AND user_password=PASSWORD('$password')"; 
$result = dbQuery($sql);
Avatar billede majbom Novice
15. august 2011 - 11:58 #1
den bruger du henter ud skulle tilfældigvis ikke have id'et 0 i din tabel?
Avatar billede Calle5463 Forsker
15. august 2011 - 12:16 #2
Splazz: Nej - dem er der ingen af - det første user_id er 1.

Jeg har prøvet med kode "den anden vej" og kan i samme function() lige før "SELECT....." med de samme variable update en eksisterende user_id med nyt brugernavn og password (underligt!).

Er der et eller andet med PASSWORD()?

(Den opmærksomme læser har sikkert allerede forstået at der er flere deltajer m.m. jeg ikke har styr på end det modsatte :-) )
Avatar billede vagnk Juniormester
15. august 2011 - 12:36 #3
Jeg forstår ikke konstruktionen :AND user_password=PASSWORD('$password')

Er PASSWORD en MySQL-procedure eller -function lavet med CREATE?
Avatar billede Calle5463 Forsker
15. august 2011 - 13:33 #4
Fandt dette "out-there" - godt nok fra 2002: (PASSWORD() er så åbenbart en mysql-funktion)

I recently ran into a problem selecting a string that was encrypted using MySQL's
PASSWORD() function. No matter what I tried, once a string was encrypted, I could
not compare another encrypted value (also using the PASSWORD function) during the
login/user authentication process.

To correct the problem, I increased the VARCHAR field I was using for the "password"
column in my user table. The password column in the MySQL database is now VARCHAR
(16) and it works like a charm!

Just for the record, my query to verify a user's username and password is:

SELECT * FROM user_data WHERE username = 'thaak' AND password = PASSWORD('thaak')
AND active = 1;

Har ændret til 16-lang det virker stadig ikke - måske jeg lige skulle spørge hos min domæne-holder!
Avatar billede Calle5463 Forsker
15. august 2011 - 14:02 #5
UPS! Min domæneholder har af sikkerhedsmæssige årsagervalgt IKKE at understøtte mysql funktionen PASSWORD() - han siger jeg skal gøre det krypteret - hvilket lige nu for mig er ... kryptisk: Er der nogen forslag til hvordan man laver en login hvor der er forskel på admin og alm. brugere.
Avatar billede olebole Juniormester
15. august 2011 - 15:05 #6
<ole>

"Er der nogen forslag til hvordan man laver en login hvor der er forskel på admin og alm. brugere."

Hver bruger har vel et tal eller andet i DB'en, som fortæller, hvilke rettigheder de har(?)

/mvh
</bole>
Avatar billede vagnk Juniormester
15. august 2011 - 15:37 #7
I fortsættelse af #3

Hvad sker der hvis du bare skriver:
AND user_password='$password'

??

Du kan sagtens lave din egen MySQL-procedure der krypterer password, men kryptering kan osse laves i php.
Avatar billede olebole Juniormester
15. august 2011 - 15:46 #8
- og hvis du agter at finde informationer om 'kryptering' på nettet, så skal du nok være opmærksom på, at der er stor forskel på kryptering og hashing.

Udfra en krypteret værdi er det muligt at finde den originale, ukrypterede værdi, hvis man har nøglen, som blev brugt ved krypteringen. Det kan man ikke ved hashing.

Det, man normalt bruger ved denne slags loginsystemer, er hashing - og altså det, du skal kikke efter.
Avatar billede olebole Juniormester
15. august 2011 - 15:49 #9
Nogle af de mest brugte er:

md5
sha1
hash
Avatar billede Calle5463 Forsker
15. august 2011 - 17:16 #10
olebole: Det var jeg også nået til at læse i en anden tråd om emnet (inden jeg skulle til dyrlæge med min gamle hund som nu ikke længere har brug for sin hundekurv i denne verden).
Mit prg. håndtere ikke vigtige persondata (cpr) eller økonomiske transaktioner (endnu), så det er lidt begrænset vor sikkert-sikkert det behøver være. Jeg skal lige omkring lidt mere viden om emnet inden jeg beslutter mig. Men jeg koncentrere mig i første omgang lige om hashing.

Der er ikke noget i min bruger-tabellen der angiver retigheder - kunne måske blot anvende bruger_id som kriterie - tror kun der bliver tale om to slags brugere ("alt" og "begrænset"), så bruger_id < 3 (f.eks) er "alt".

(Er PASSWORD() en for gammel og "gennemsigtig" funktion?)
Avatar billede vagnk Juniormester
15. august 2011 - 17:21 #11
Jeg gentager

I fortsættelse af #3

Hvad sker der hvis du bare skriver:
AND user_password='$password'

??
Avatar billede Calle5463 Forsker
15. august 2011 - 17:49 #12
vagnk:
1: Hvis jeg ændre så den ikke "laver" PASSWORD() når jeg indsætter user_password i tabellen, så står det (selvfølgelig" som ren text i tabellen.
2: Når jeg bagefter læser det uden at anvende PASSWORD() bliver $result=1 og jeg bliver logget ind.

Så konklusionen må være som tidligere beskrevet i #5 og #10 med #9/hashing som løsning.

Men tak for at du fik mig til at lave den lille test, så fik jeg konstateret at resten af skidtet jo faktisk (måske ) virker - det var dejligt  :-)

Ved ikke rigtigt hvem af vagnk og olebole der mest har fortjent pointene, men vagnk fik mig faktisk ret tidligt på sporet af at PASSWORD() ikke fungerede, så .... er det ikke bare sådan at vagnk lige giver et svar?
Avatar billede olebole Juniormester
15. august 2011 - 17:57 #13
Det gør mig oprigtig ondt at høre om din hund. Hvis man bliver så gammel, at livet ikke byder een andet end lidelse, går jeg dog varmt ind for hjælp til at ende livet - menneske eller andet dyr. Mit råd er altid at prøve at vende sorgen til glæde over at have haft det held at kende vedkommende (igen, menneske eller dyr) i så lang tid. Jeg håber, du hurtigt kommer over den første sorg og snart genfinder glæden  =)
Avatar billede Calle5463 Forsker
15. august 2011 - 18:08 #14
Tak olebole, jeg har altid spurgt de hundeførere jeg har trænet, om de har gjort sig nogle tanker om hvornår nok er nok. Tidspunktet og grænserne er forskellige fra person til person - og sådan er det. Men det vigtige er, at man ved hvor grænsen går, for opgaven kommer som en tyv om natten. Min han-lab blev 11½ og var klar i hoved, øjne, næse og øre men bagbenene ville ikke rigigt mere. så det var det. Så nu skal vi videre med hende på 5 mdr - over stok og sten det går :-)
Avatar billede Calle5463 Forsker
20. august 2011 - 18:31 #15
- lader ikke til vagnk vil have point.
Så olebole - læg lige et svar
Avatar billede olebole Juniormester
20. august 2011 - 20:59 #16
Ellers tak, jeg samler ikke længere points. Hvis ikke vagnk ønsker points, så læg selv et svar og accepter det, så tråden lukkes  =)
Avatar billede Calle5463 Forsker
20. august 2011 - 22:34 #17
Lukker og slukker
Avatar billede vagnk Juniormester
21. august 2011 - 08:26 #18
Undskyld, men helt rigtigt at jeg ikke skulle have svar!
Vagn
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester