[PHP] Sessie/Authorisatie Probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een redelijk eenvoudige website dynamisch aan het maken, hier dus een simpel custom content management systeem bij. So far so good. Echter dat systeem wil ik nu even op een juiste manier van een login/password voorzien.

Het globale idee is dat ik het volgende aan bestanden heb:
- index.php
- login.inc
- welcome.inc
- *.inc (voor verschillende zaken m.b.t. content management)

Login.inc bevat het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($ingevuld == "yep")
    {
    $query  = "SELECT UserID FROM cnt_Users WHERE Name = '$Name' AND Password = '$Password';";
    $result = mysql_query($query);
    $row    = mysql_fetch_row($result);
    $UserID = $row['0'];
    if ($UserID <> "")
        {
        $HTTP_SESSION_VARS['ingelogd'] = "yes";
        ?>
        <script>window.navigate("index.php");</script>
        <?
        }
    }


Verder zit er het volgende form in login.inc:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form name="Login" method="post" action="index.php">
<input type="hidden" name="ingevuld" value="yep">
<td width="545" cellspacing="0" cellpadding="0" border="0">
    <table width="545" cellspacing="0" cellpadding="0" border="0">
        <tr>
            <td width="100" align="left" valign="middle" height="25">Usernaam:</td>
            <td width="250" align="left" valign="middle" height="25"><input type="text" class="textbox" name="Name"></td>
        </tr>
        <tr>
            <td width="100" align="left" valign="middle" height="25">Wachtwoord:</td>
            <td width="250" align="left" valign="middle" height="25"><input type="password" class="textbox" name="Password"></td>
        </tr>
        <tr>
            <td width="100" align="left" valign="middle" height="25"></td>
            <td width="250" align="left" valign="middle" height="25"><input type="submit" name="submit" value="inloggen"></td>
        </tr>
    </table>
</td>
</form>


In index.php staat de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (isset($HTTP_SESSION_VARS['ingelogd']))
    {
    switch ($page)
        {
        case ListCategories:
            require ("inc/listcategories.inc");
            break;
        default:
            require ("inc/welcome.inc");
            break;
        }
    }
else
    {
    include("inc/login.inc");
    }


Nou het probleem is dus als volgt. Naar mijn mening, maar die zal ongetwijfeld niet kloppen, dient er als ik met de juiste loginnaam en wachtwoord gesubmit heb welcome.inc ingeladen te worden. Echter op dat moment wordt er geen enkele include meer ingeladen. Ook bij een foute login wordt er geen enkele include ingeladen, dus login.inc ook niet opnieuw.

Mocht iemand me kunnen helpen, dan graag. Het zal, zoals altijd, wel weer een simpel foutje zijn waar ik gewoon overheen aan het kijken ben.

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Ten eerste, worden .inc bestanden wel door de PHP-parser gehaald? Tis best gevaarlijk om vreemde extensies te gaan gebruiken als je deze code ook op andere servers wilt gebruiken. Gebruik dan lievern <blaat>.inc.php, dat werkt in ieder geval altijd. :)

Daarnaast, voor een variabele als ingelogd kun je beter een boolean gebruiken, dus:

code:
1
$HTTP_SESSION_VARS['ingelogd'] = true;


Dan wordt index.php:

code:
1
if ($HTTP_SESSION_VARS['ingelogd']) { ...


Nog iets:
In login.inc haal je de username en het password gewoon met globals op, probeer het eens met $_POST['username'] en $_POST['password']. ;)

[ Voor 6% gewijzigd door --MeAngry-- op 13-10-2005 11:04 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

Verwijderd

Nog een kleine tip.

Ipv $HTTP_SESSION_VARS['ingelogd'] is het misschien beter om $_SESSION['ingelogd'] te gebruiken.

En natuurlijk zoals hierboven vermeld rekening houden dat globals best af staat en je de gegevens beter met $_POST en $_GET ophaalt.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

offtopic:
Even over deze line in login.inc:

PHP:
1
$query  = "SELECT UserID FROM cnt_Users WHERE Name = '$Name' AND Password = '$Password';";


offtopic:
Zoals hierboven gezegd is het een stuk netter om die waarden uit de superglobals te halen en register_globals in php.ini op off te hebben staan. Zorg je er dan verder voor dat je magic_quotes aan hebt staan, of dat je de ingevoerde waarden anderszins valideert? Anders is dit een ideaal stukje code om wat mysql insertion mee uit te proberen. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

--MeAngry-- schreef op donderdag 13 oktober 2005 @ 11:04:
Dan wordt index.php:
code:
1
if ($_SESSION['ingelogd']) { ...
En wat dan als de sessie niet gezet is. Dan krijgt hij een error. (Als er een normale error reporting aanstaat dan)

Dus dat lijkt me niet zo`n slim plan.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de tips. Inmiddels .inc naar .inc.php verandert, $var naar $_POST['var'], en de sessie variabele naar een boolean verandert. Helaas verandert dit nog niks aan het probleem an zich.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Dat wordt toch een kwestie wordt van zelf even debuggen denk ik. ;)
Heel snel bekeken zou ik eerst dit stukje eens onder de loep nemen:
PHP:
1
2
3
4
5
6
7
8
9
$UserID = $row['0'];
    if ($UserID <> "")
        {
        $HTTP_SESSION_VARS['ingelogd'] = "yes";
        ?>
        <script>window.navigate("index.php");</script>
        <?
        }
    }

$UserID = $row['0']; krijg je daar überhaupt een resultaat uit als je een juist wachtwoord en gebruikersnaam invult?
Echo $UserID eens nadat je 'm gevuld hebt. Als daar iets niet goed gaat, dan is het geen wonder dat er niets meer gebeurt, want dan betreedt je de code na je if-statement nooit. ;)

Overigens... waarom staat daar: if ($UserID <> ""). Dat kan dan toch net zo goed if ($UserID != "") zijn?; daar hoef je volgens mij geen rekenkundige vergelijkingen op los te laten. :P

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-07 19:47
hoe weet je zo zeker dat er geen enkele include meer ingeladen wordt dan?

Acties:
  • 0 Henk 'm!

  • jochemd
  • Registratie: November 2000
  • Laatst online: 24-08 12:31
Verwijderd schreef op donderdag 13 oktober 2005 @ 10:54:

Login.inc bevat het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($ingevuld == "yep")
    {
    $query  = "SELECT UserID FROM cnt_Users WHERE Name = '$Name' AND Password = '$Password';";
    $result = mysql_query($query);
    $row    = mysql_fetch_row($result);
    $UserID = $row['0'];
    if ($UserID <> "")
        {
        $HTTP_SESSION_VARS['ingelogd'] = "yes";
        ?>
        <script>window.navigate("index.php");</script>
        <?
        }
    }
Dit is niet bepaald veilig. Je controleert niet eens of er niet meer dan één UserID terugkomt van iemand die eerdere beveiligingen heeft weten te omzeilen.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Nog iets... ik zie nergens een session_start() staan. Das toch behoorlijk handig als je met sessies werkt. :+
Gebruik dus de superglobal $_SESSION en doe op elke pagina waar je je sessie gebruikt (ook als je 'm vult) een session_start(). Misschien dat het daar wat beter van wordt. :P

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, fout gevonden en opgelost:

geen db connect gemaakt dus.... |:( |:( |:( |:(

excuses voor de domme vraag dus..

Acties:
  • 0 Henk 'm!

  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

Verwijderd schreef op donderdag 13 oktober 2005 @ 12:08:
Goed, fout gevonden en opgelost:

geen db connect gemaakt dus.... |:( |:( |:( |:(

excuses voor de domme vraag dus..
buiten dat hoop ik dat medeforummers hun commentaar toch niet voor niets hebben getypt?

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

* crisp mompelt nog iets over plaintext wachtwoorden in een database, en dat dat meestal ook niet echt wenselijk is...

Intentionally left blank

Pagina: 1