Toon posts:

[php]vreemde bug.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit nu al 2 dagen te klooien met dezelfde bug....

eerst zal ik uitleggen wat er gebeurt:

www.cj-multisoft.nl/admin/list.php

die kijkt eerst of er is ingelogged, dat is niet zo, en dus word je geredirect naar www.cj-multisoft.nl/users/login.php

so far so good :)
daar kan je inloggen onder de naam lll en met pass lll .

Dat werkt ook, hij ziet dat je in de database staat en geeft je een stel cookies.

maar dan... Als je in de bron kijkt van www.cj-multisoft.nl/users/login.php (na het inloggen) zie je dat de link netjes naar www.cj-multisoft.nl/admin/list.php toe staat, maar als je er op klikt, ga je dus weer terug naar de inlogpagina :( ....

Dan heb ik hier de belangrijkste sourcecodes:


list.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

require("../includes/connect.php");
require("../admin/check.php"); 

$result = (mysql_query("SELECT ID, voornaam, tussenvoegsels, achternaam,
inschrijfdatum FROM users order by ID"));
//kijk of de database leeg is
if (mysql_num_rows($result) == 0) {
    echo "Nog geen gebruikers gevonden.";
}
//gooi het op het scherm
else {
    echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" width=\"600\">\n";
    echo "<tr><td>Naam</td><td>lid sinds</td><td>Show/Edit info</td></tr>";
    while ($row = mysql_fetch_object($result)) {
        echo "<tr> <td>$row->voornaam $row->tussenvoegsels
$row->achternaam</td><td>$row->inschrijfdatum</td><td>
<a href=\"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).
"/edit.php?ID=$row->ID\">[X]</a></td></tr>";
    }
    echo "</table>";
}
?>


check.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php

require("../includes/config.php"); 


//kijk of het logincookie bestaat.
if ($HTTP_COOKIE_VARS["login"] != yes){
    //nee? dan direct naar login pagina sturen.
    header("Location: http://".$_SERVER['HTTP_HOST']."/users/login.php?
        ref=".$_SERVER['PHP_SELF']);
}
else {
    //bestaat het inlogcookie wel ?, kijk of er niet is gerommeld met het cookie.
    //Bereken de hash
    $hash = md5($HTTP_COOKIE_VARS["ID"].$HTTP_COOKIE_VARS["name"].
        $HTTP_COOKIE_VARS["password"].$key);
    //kijk of de nieuwe hash gelijk is aan die van de gebruiker.
    if($hash != $HTTP_COOKIE_VARS["userhash"]) {
        //nee? dan word er dun niet ingelogged... (login blijft unset)
        echo "Lamer detected!!!";
        exit();
    }
    else{
        $result = (mysql_query("SELECT admin FROM users where ID = " .
                $HTTP_COOKIE_VARS["ID"]));
        if (mysql_num_rows($result) != 1) {
            echo "Lamer detected!!!";
            exit();
        }
        else{
            while ($row = mysql_fetch_object($result)) {                
                if ($row->admin != yes) {
                    echo "Je bent geen admin :)<br>En dat is wel nodig voor deze actie.";
                    exit();
                }
            }           
        }
    }
}
?>


de login.php werkt wel goed met deze check.php (kijkt niet of het een admin is).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

require("../includes/config.php"); 


//kijk of het logincookie bestaat.
if ($HTTP_COOKIE_VARS["login"] != yes){
    //nee? dan direct naar login pagina sturen.
    header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).
"/login.php?ref=".$_SERVER['PHP_SELF']);
}
else {
    //bestaat het inlogcookie wel ?, kijk of er niet is gerommeld met het cookie.
    //Bereken de hash
    $hash = md5($HTTP_COOKIE_VARS["ID"].$HTTP_COOKIE_VARS["name"].
        $HTTP_COOKIE_VARS["password"].$key);
    //kijk of de nieuwe hash gelijk is aan die van de gebruiker.
    if($hash != $HTTP_COOKIE_VARS["userhash"]) {
        //nee? dan word er dun niet ingelogged... (login blijft unset)
        echo "Lamer detected!!!";
        exit();
    }
}
?>


(als je dat zelf wil testen moet je maar eens naar www.cj-multisoft.nl/users/edit.php gaan en dan ook met lll / lll inloggen.)


hier nog een deel van de loginpagina:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            $userhash = md5($ID.$voornaam.$password.$key);
        setcookie ('userhash', $userhash, time()+3600, '', $HTTP_HOST);
        setcookie ("ID", $ID, Time()+3600, '', $HTTP_HOST);
        setcookie ("name", $voornaam, Time()+3600, '', $HTTP_HOST);
        setcookie ("password", $password, Time()+3600, '', $HTTP_HOST);
        setcookie ("login", 'yes', Time()+3600, '', $HTTP_HOST);
        echo "Acces Granted <br>";
        if ($HTTP_GET_VARS['ref']) {
            echo "Klik <a href=\"http://".$_SERVER['HTTP_HOST'].$HTTP_GET_VARS['ref']."\">
hier</a> om terug te gaan naar de pagina waar u vandaan kwam.";
        }
        else {
            echo "Klik <a href=\"../index.php\">hier</a> om naar de indexpagina te gaan.";
        }


Ziet iemand wat ik hier fout doe ?

sorry voor de layout, heb zoveelmogelijk de regels ingekort.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Klinkt op de "ik zet een cookie in de ene subdir, maar is dan niet gezet in de andere subdir", dus moet je aangeven in je cookie dat dat cookie geldt voor je hele domein, en niet alleen voor de lokale subdir waarin het wordt gezet.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
dusty schreef op 29 september 2002 @ 14:23:
Klinkt op de "ik zet een cookie in de ene subdir, maar is dan niet gezet in de andere subdir", dus moet je aangeven in je cookie dat dat cookie geldt voor je hele domein, en niet alleen voor de lokale subdir waarin het wordt gezet.
nee dat is het niet, $HTTP_HOST is de domein, en er word geen directory genoemd....

Verwijderd

Verwijderd schreef op 29 september 2002 @ 14:25:
[...]


nee dat is het niet, $HTTP_HOST is de domein, en er word geen directory genoemd....
dat probleem had ik zonet ook .. als ik dat $HTTP_HOST weg haal werkt het wel . .maar zonder werkt het neit .. die cookies.. zwaar irrir

Verwijderd

Topicstarter
Verwijderd schreef op 29 september 2002 @ 14:51:
[...]

dat probleem had ik zonet ook .. als ik dat $HTTP_HOST weg haal werkt het wel . .maar zonder werkt het neit ..

ik heb ze nu weggehaald, nog steeds niets :(


die cookies.. zwaar irrir
vertel mij wat :P

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

'k Heb niet echt inhoudelijk naar je code gekeken, maar definieer je 'yes' wel als een constante?

Regel 7 check.php en login.php: if ($HTTP_COOKIE_VARS["login"] != yes){

Zo ja: never mind :)
Zo nee: run je code met error_reporting(E_ALL);

This can no longer be ignored.


Verwijderd

wat denk je van

if ($HTTP_COOKIE_VARS['login'] != "yes"){

ipv
if ($HTTP_COOKIE_VARS["login"] != yes){

  • simon
  • Registratie: Maart 2002
  • Laatst online: 15:49
Wat denk je van

sessions

ipv
cookies...

(btw, volgens mij maakt die ' of de " (wat foxboy zei niet veel uit...) (ik kan het ook fout hebben)..

|>


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Het gaat om die yes vs "yes" ...

Over het algemeen doet php dat wel aardig, maar het blijft vreselijk fout :)

Verwijderd

Topicstarter
Verwijderd schreef op 29 september 2002 @ 15:29:
wat denk je van

if ($HTTP_COOKIE_VARS['login'] != "yes"){

ipv
if ($HTTP_COOKIE_VARS["login"] != yes){
" of ' om login heen maakt weinig uit....

"" bij yes, dat is erg slordig, maar niet de oorzaak van deze fout/bug

Dus.. het werkt nog steeds niet :(

Ik begin te vermoeden dat het iets te maken heeft met :
I have found that insuring that the server name in
the URL must match the server canonical name in order for stuff to work most reliably. I use something like this in a strategic location before I start fiddling with cookies:

if ($HTTP_HOST != $SERVER_NAME) {
header("HTTP/1.0 301");
header("Location: ".METHOD."://".$SERVER_NAME.$PHP_SELF);
exit;
}
quote van http://www.php.net/manual/sv/printwn/function.setcookie.php


ik knutsel nog ff verder :)

Verwijderd

/me moet lachen om de regels "Hacker Detected" "Lamer Detected" ... ik denk er zelf wel een luchtalarm bij :D

Verwijderd

Topicstarter
Verwijderd schreef op 29 september 2002 @ 16:06:
/me moet lachen om de regels "Hacker Detected" "Lamer Detected" ... ik denk er zelf wel een luchtalarm bij :D
ghehe, ik moet wat om het uit elkaar te houden :P
Pagina: 1