Toon posts:

Verouderde MySQL vraag.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een user systeem en ik heb enkele andere scipts gebruikt om dit inelkaar te zetten. Nu weet ik niet precies wat de volgende query doet. Wat ik eruit kan opmaken is Vergelijk het encrypted password in de db met het opgegeven password ofzo?
code:
1
2
$arg = "select password, 1 as auth from dgf_users where username='$username' and password=encrypt('$password','$username')";
$row = mysql_fetch_array(mysql_db_query(databasenaam, $arg ));

Nu wil ik eigen zoiets als dit gebruiken, want ik gebruik mysql_pconnect en mysql_selectdb en in dat scipt wat ik nu gebruik voor dit systeem gebruiken ze het (volgens mij veroudere) mysql_connect en mysql_db_query enzo.

Dit is wat ik gewend ben
code:
1
2
$res = mysql_query("SELECT password FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");
$row = mysql_fetch_array($arg);

Ik weet wel dat dit dus fout is, het werkt immers niet. Kan iemand mij misschien vertellen hoe ik die query moet aanpassen, op de manier zoals in het laatste voorbeeld is?

Zo ziet het login stukje eruit met het plaatsen van de cookie, is dit een beetje veilig?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if ($action == "login") {
    $arg = "select password, 1 as auth from acl where username='$username' and password=encrypt('$password','$username')";
    $row = mysql_fetch_array(mysql_db_query(databasenaam, $arg ));

    if ($row[auth]) {
        if (defined( "AUTH_LOG" )) {
            error_log( date("Ymd H:i:s") . " -- $ip -- Username: '$username' authenticated\n", 3, AUTH_LOG);
            $md5str = MD5( TIME() );
            $cookie_val = "$username-$encrypted_password-$md5str";
            setcookie( "php_mini_auth", $cookie_val, time()+EXPIRE);
            $arg = "update acl set string='$md5str' where username='$username'";
            $row = mysql_db_query( DATABASE, $arg );
            echo "Je bent ingelogd";
        }
    }
    
    else {
        if (defined( "AUTH_LOG" )) {
            error_log( date("Ymd H:i:s") . " -- $ip -- Username: '$username' authentication failure\n", 3, AUTH_LOG);
            echo "Verkeerde username en/of password";
        }
    }
}

BTW, ik loop al sinds vanochtend 9 uur te kutten. Dus ik mag toch hopen dat dit topic justified is? :P

Alvast bedankt.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:04 schreef Mannekino het volgende:
Ik ben bezig met een user systeem en ik heb enkele andere scipts gebruikt om dit inelkaar te zetten. Nu weet ik niet precies wat de volgende query doet. Wat ik eruit kan opmaken is Vergelijk het encrypted password in de db met het opgegeven password ofzo?
code:
1
2
3
4
$arg = "select password, 1 as auth from dgf_users 
where username='$username' 
and password=encrypt('$password','$username')";
$row = mysql_fetch_array(mysql_db_query(databasenaam, $arg ));
Als je query's niet begrijpt, zet ze dan overzichtelijk onder elkaar en voeg quotes toe:
code:
1
2
3
4
5
6
SELECT  password
      1     AS 'auth'
FORM    dgf_users
WHERE   username = '$username'
      AND
      password = encrypt('$password','$username')
Nu wil ik eigen zoiets als dit gebruiken, want ik gebruik mysql_pconnect en mysql_selectdb en in dat scipt wat ik nu gebruik voor dit systeem gebruiken ze het (volgens mij veroudere) mysql_connect en mysql_db_query enzo.
mysql_connect is helemaal niet verouderd, het wordt gebruikt om een niet-persistente databaseverbinding aan te maken. mysql_pconnect wordt daarvoor wel gebruikt. Over de voor- en nadelen van persistent links zijn al verschillende topics op GoT geweest. En mysql_db_query() is gewoon een andere manier van een database kiezen en daarop een query op uit te voeren.

Verwijderd

Topicstarter
OK komt de standaard tweede reactie van mij. Hebbie mij vraag wel goed gelezen.

Ik die query dus niet zelf geaschreven en ik probeer hm te berijpen zodat ik hm om kan zetten naar die andere manier want hij werkt zo niet met mijn mysql connect die ik in een andere php bestand oproep. En die gebruik ik over de hele site.

Ik weet niet hoe ik het anders aan praat kan krijgen, want met dit nieuwe script heb ik dus ook nog een functie die de cookie valideert en die moet ik strx gebruiken over de hele site, welke dus gebruik maak van die pconnect en selectdb

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:15 schreef Mannekino het volgende:
OK komt de standaard tweede reactie van mij. Hebbie mij vraag wel goed gelezen.
Ja, tenminste ik heb mijn best gedaan... :+

Wat ik met mijn reactie wil zeggen is om hem beter te begrijpen moet je hem omschrijven. En in dat geval kun je duidelijk zien wat hij doet.

In dit geval zal hij bij een match twee velden teruggeven, namelijk die van password dat het versleutelde password bevat en 'auth' die de waarde 1 bevat. (Wat het nut daarvan is :? Om te kijken of er een match is kun je volgens mij veel beter mysql_num_rows() gebruiken)

Het is dus een beetje vreemde query.

Verwijderd

Topicstarter
Op donderdag 07 maart 2002 21:20 schreef elnino het volgende:

[..]

Ja, tenminste ik heb mijn best gedaan... :+
:P Ik ben al sinds vanochtend NONSTOP mij best aan het doen.

Maar het script krijgt dus via een form de waarde password en username door.

Kan ik dan bijvoorbeeld zo een vergelijking maken
code:
1
$res2 = mysql_query("SELECT username and password FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");

Hoe nu dan verder om de cookie te plaatsen?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:26 schreef Mannekino het volgende:
Kan ik dan bijvoorbeeld zo een vergelijking maken
code:
1
2
3
$res2 = mysql_query("SELECT username and password 
FROM dgf_users WHERE username='$username' and 
password=encrypt('$password','$username')");
Na een SELECT statements horen geen AND's maar komma's, dus (na een WHERE trouwens wel):
code:
1
2
3
4
SELECT    username AS 'username',
        password AS 'password'
FROM    ...
WHERE     ... AND ...
Hoe nu dan verder om de cookie te plaatsen?
Je kan setcookie() gebruiken, of gebruik maken van sessions (daar heeft PHP zelf speciale functies voor).

Verwijderd

Topicstarter
Maar hoe komt het nou tot stand of iemand wel of niet een goede combinatie in heeft gevoerd, als je naam mijn eerste posting kijkt. Dus het hele scriptje ff kijken.

if ($row[auth]) {
}

Wat gebeurt hier nu?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:34 schreef Mannekino het volgende:
Maar hoe komt het nou tot stand of iemand wel of niet een goede combinatie in heeft gevoerd, als je naam mijn eerste posting kijkt. Dus het hele scriptje ff kijken.

if ($row[auth]) {
}

Wat gebeurt hier nu?
Als er in is gelogd staat die 'auth' op 1, dus is 'auth' true. Is er geen juiste record gevonden, dan is 'auth' ongedefinieerd (en heeft dus de waarde 0, en is dus false). Met dit soort constructies moet je trouwens wel oppassen, want werken met ongedefinieerde variabelen is niet aan te raden. Je kunt dus beter mysql_num_rows() gebruiken, die kijkt namelijk hoeveel rijen er gematcht zijn. Als er geen rijen gematcht zijn is mysql_num_rows() 0 en is de user dus niet ingelogd.

Verwijderd

Topicstarter
code:
1
2
3
4
5
if ($action == "login") {
    $res = mysql_query("SELECT username, password FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");
    $ar = mysql_fetch_array($res);
    
}

Ok dit werkt nu, als ik nu zegmaar het password laat weergeven laat ie hem zien. Maar hoe kan ik nu het enctypte password vergelijken met de string die ik ingevuld het in het formulier?

Dus nu kan ik met num_rows zeg maar zeggen van is num_row is gelijk aan 1 dan ben je ingelogd en alles daarbuiten is niet ingelogd ofzo.

Verwijderd

Topicstarter
Op donderdag 07 maart 2002 21:37 schreef elnino het volgende:

[..]

Als er in is gelogd staat die 'auth' op 1, dus is 'auth' true. Is er geen juiste record gevonden, dan is 'auth' ongedefinieerd (en heeft dus de waarde 0, en is dus false). Met dit soort constructies moet je trouwens wel oppassen, want werken met ongedefinieerde variabelen is niet aan te raden. Je kunt dus beter mysql_num_rows() gebruiken, die kijkt namelijk hoeveel rijen er gematcht zijn. Als er geen rijen gematcht zijn is mysql_num_rows() 0 en is de user dus niet ingelogd.
Ja ik snap het, nu kan iemand met een beetje goochelen een waarde auth 1 ergens aan meegeven om ingelogd te worden met een cookie.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:40 schreef Mannekino het volgende:
Ok dit werkt nu, als ik nu zegmaar het password laat weergeven laat ie hem zien. Maar hoe kan ik nu het enctypte password vergelijken met de string die ik ingevuld het in het formulier?
Door dezelfde versleutelingsmethode te gebruiken die het password gebruikt. Als je MD5 hebt gebruikt, zul je het ingevoerde password ook moeten MD5'en. Als je encrypt hebt gebruikt moet je het wachtwoord dus ook moeten encrypten.
Dus nu kan ik met num_rows zeg maar zeggen van is num_row is gelijk aan 1 dan ben je ingelogd en alles daarbuiten is niet ingelogd ofzo.
Als de query goed is, kun je daar in principe van uitgaan.

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if ($action == "login") {
    $res = mysql_query("SELECT username, password FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");
    $num = mysql_num_rows($res);
    
    if ($num == 1) {
        $md5str = MD5( TIME() );
        $cookie_val = "$username-$encrypted_password-$md5str";
        setcookie( "php_mini_auth", $cookie_val, time()+EXPIRE);
        $res = mysql_query("UPDATE dgf_users SET string='$md5str' WHERE username='$username'");
        echo "Je bent ingelogd";
    }
    
    else {
        echo "Foute login combinatie";
    }
}

Begint dit er al een beetje op te lijken? Is dit veilig zo.

BTW, is dit voor

$res = mysql_query("SELECT username AS '$username', password AS '$password' FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");

om ervoor te zorgen dat het niet uitmaakt op welke volgorder username en password in de db staan?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 07 maart 2002 21:49 schreef Mannekino het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if ($action == "login") {
    $res = mysql_query("SELECT username, password 
FROM dgf_users WHERE username='$username' and 
password=encrypt('$password','$username')");
    $num = mysql_num_rows($res);
    
    if ($num == 1) {
        $md5str = MD5( TIME() );
        $cookie_val = 
"$username-$encrypted_password-$md5str";
        setcookie( "php_mini_auth", $cookie_val,
time()+EXPIRE);
        $res = mysql_query("UPDATE dgf_users 
SET string='$md5str' WHERE username='$username'");
        echo "Je bent ingelogd";
    }
    
    else {
        echo "Foute login combinatie";
    }
}

Begint dit er al een beetje op te lijken? Is dit veilig zo.
Ziet er wel goed uit.
BTW, is dit voor

$res = mysql_query("SELECT username AS '$username', password AS '$password' FROM dgf_users WHERE username='$username' and password=encrypt('$password','$username')");

om ervoor te zorgen dat het niet uitmaakt op welke volgorder username en password in de db staan?
Haal dat $username en $password direct weg!!!! Anders zal het moeilijk worden om de velden in de databases goed aan te spreken als je ze variabele namen geeft.

Zonder AS '...' is het ook goed.

Verwijderd

Topicstarter
Hej hartstikke bedankt man, ik ga weer snel verder. Ik ga nu een functie schrijven weermee de cookie gevalideerd wordt met de username en pass in de db. Die ik overal op mijn site kan gebruiken om member only pages te controleren.

Als ik alles af heb met het user management systeem erbij en postik wel ff een linkje met de sourcecode. :)

Is er trouwens nog een betere manier om je passes te encrypten voor een site zoals http://www.dutchgeforce.nl of is dit meer als voldoende. Een kameraad van me zit op de zelfde db als ik met PHPBB2.0 en als ik die passwords zie zijn de nog langer versleuteld.
Pagina: 1