Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] Irritante sessions (https://forum.scholieren.com/showthread.php?t=1062332)

Jordi 04-01-2005 01:10

[PHP] Irritante sessions
 
Ik ben mijn loginscript aan het herschrijven en het is nu zo'n beetje af, alleen het werkt niet (meer). Eerst wel, maar nu loopt hij irritant te doen en volgens mij heb ik niets veranderd.

Dit is mijn code: (check() wordt aangeroepen)
PHP-code:

...
function 
sessions ($user_id$user$pass$mail)
{
    echo 
"$user_id<br />$user<br />$pass<br />$mail<br />";
    if (
session_register("user_id")) echo "1<br />";
    if (
session_register("user")) echo "2<br />";
    if (
session_register("pass")) echo "3<br />";
    if (
session_register("mail")) echo "4<br />";
}

function 
check ()
{
    
$query "    SELECT user_id, username, password, email
                FROM jbieger_users
                WHERE username='"
.$_POST['username']."'";
    
$userinfo mysql_fetch_object(mysql_query($query));
    
    if (
$userinfo->username)
    {
        
$password md5($_POST['password']);
        if (
$password == $userinfo->password)
        {
            
sessions($userinfo->user_id$_POST['username'], $_POST['password'], $userinfo->email);
            if (
$_SESSION["user"])
                echo 
"U bent succesvol ingelogd";
            else
                echo 
"Er is een probleem opgetreden.";
        }
        else
            echo 
"Het ingevoerde wachtwoord is fout.";
    }
    else
        echo 
"Deze gebruikersnaam bestaat niet.";
}
... 

Het is uiteraard de bedoeling dat ik straks de melding ga krijgen dat ik succesvol ben ingelogd, maar dat gaat dus niet werken.
Ik krijg namelijk deze output:
Code:

24
Test
lalala
test@test.test
1
2
3
4
Er is een probleem opgetreden.

Met andere woorden:
Alle variabelen die in die sessie moeten komen, worden goed doorgegeven (zie eerste 4 regels output) en alle sessies worden goed geregistreerd (zie volgende 4 regels). Alleen toch is blijkbaar nog een probleem. Het moet aan de sessies liggen, want anders zou ik wel een andere foutmelding hebben gehad en bovendien is $_SESSION["user"] (en de anderen ook) leeg.

Ik snap er echt niets van en ik hoop dat iemand mij kan helpen.

Chimera 04-01-2005 02:10

Misschien moet je de username e.d. ook eens daadwerkelijk in de sessie stoppen?

Jordi 04-01-2005 08:01

Ik heb nu:

$_SESSION["user_id"] = $user_id; enzovoorts.

Ik neem aan dat je dit bedoelt, want zo werkt het dus inderdaad wel. Kan iemand mij uitleggen waarom session_register("user_id"); in dit geval niet werkte en soms ook wel (in mijn oude loginscript en eerst ook in dit script)?

Fade of Light 04-01-2005 10:02

session_register....even de naam vertalen "registreer sessie (variabele)"...Oftewel, dan is bekend dat je die sessievariabele gebruikt en daarna pleur je er een waarde in (dmv $_SESSION['var'] = $bla) :)

Triloxigen 04-01-2005 10:59

session_start() gebruikt?

Enlightenment 04-01-2005 12:52

Citaat:

WHERE username='".$_POST['username']."'"
Je begrijpt trouwens dat je script hierdoor lek is als je geen Magic Quotes GPC gebruikt he? ;)

Jordi 04-01-2005 22:03

Citaat:

Fade of Light schreef op 04-01-2005 @ 11:02 :
session_register....even de naam vertalen "registreer sessie (variabele)"...Oftewel, dan is bekend dat je die sessievariabele gebruikt en daarna pleur je er een waarde in (dmv $_SESSION['var'] = $bla) :)
Ik snap wel waarom dat andere (wat ik nu dus heb) beter is. Of beter gezegd: ik snap een beetje hoe dat andere werkt, maar eerst deed ik het altijd zo:
$variabale = "iets";
session_register("variabele");

En dan werkte het op de één of andere manier.

Citaat:

********** schreef op 04-01-2005 @ 11:59 :
session_start() gebruikt?
Ja, dat wel. :)

Citaat:

Enlightenment schreef op 04-01-2005 @ 13:52 :
Je begrijpt trouwens dat je script hierdoor lek is als je geen Magic Quotes GPC gebruikt he? ;)
Nee, dat begrijp ik niet, want ik weet niet wat GPC is.

dafelix 04-01-2005 22:27

Citaat:

Jordi schreef op 04-01-2005 @ 23:03 :
Nee, dat begrijp ik niet, want ik weet niet wat GPC is.

ik laat zien hoe je je onzorgvuldigheid kan gebruiken:

GET index.php
POST username: niks OR 1=1


PHP-code:

$query "    SELECT user_id, username, password, email
                FROM jbieger_users
                WHERE username='"
.$_POST['username']."'"
?> 

zal resulteren in deze query:

SELECT user_id, username, password, email
FROM jbieger_users
WHERE username=niks OR 1=1.

waarop ik de hele DB leegpomp

je moet de functie 'addslashes' gebruiken, en lees dan direct op php.net hoe die functie gebruikt wordt

Jordi 04-01-2005 23:53

Maar ik heb ook nog enkele aanhalingstekens om de invoer heen staan, dus dan zou ik toch WHERE username='niks OR 1=1' krijgen? En dat is geen probleem. :) (nou ja, behalve dat die username niet bestaat)

dafelix 05-01-2005 09:51

Citaat:

Jordi schreef op 05-01-2005 @ 00:53 :
Maar ik heb ook nog enkele aanhalingstekens om de invoer heen staan, dus dan zou ik toch WHERE username='niks OR 1=1' krijgen? En dat is geen probleem. :) (nou ja, behalve dat die username niet bestaat)
nee, want nu voer ik simpelweg dit in:

niks' OR 1=1


omdat hij die ''' (enkele quote) ziet als afsluiting van het commando, als je de functie 'addslashes' gebruikt, dan zet hij voor die '''' (enkele quote) een '\\' (slash) en interpreteerd MySQL het nietmeer als afsluiting van het commando, en ben je veilig

(zoek met google eens op 'MySQL injection', je zal berichten tegenkomen van de grootste bedrijven die veelal deze exploits hebben)


Alle tijden zijn GMT +1. Het is nu 14:14.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.