Toon posts:

[php] sessions zo veiliger?

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hai,

ik ben bezig met een projectje, en het leek me leuk om dit is in php te doen.
nu werk ik dus met sessions, maar ik wil ook de mensen die geen cookies accepteren van de site gebruik laten maken. Dan kan je natuurlijk de session ID in de url zetten, maar dat maakt het makkelijk om iemand anders z'n session te onderscheppen doore gewoon een sessionID te raden.

daarom heb ik nu een soort van check-string gemaakt, met de sessionID en de username ge-encrypt met RSA,
een voorbeeldje hiervan zie je op http://www.sitevan.nl/rsa.php

ik heb nu dus de 3 vedgedrukte keys hardcoded in mijn script staan, zo kan ik encrypten en decrypten. (als je refreshed dan zie je dus andere keys, ze worden gegenereerd)

nu vraag ik me of of het zo veilig is of niet?
hoe zouden jullie het doen?
wat kan er beter?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

...iemand anders z'n session te onderscheppen doore gewoon een sessionID te raden....
Dat kan met cookies net zo goed.

Waarvoor wil je de rsa eigenlijk gaan gebruiken? Wil je de sessie ID gaan encrypten? Dat heeft imho weinig nut. Voordat je een normale sessie ID juist hebt geraden ben je net zo lang bezig als het gokken met een gecodeerde string.

Wat je misschien beter kunt doen is aan de server kant in de sessie ook het ip numer op te slaan. Op die manier is het bijna niet meer mogelijk om een sessie over te nemen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
het encrypten van username + sessionID, zo moet je de session weten en de checksum die bij die gebruikersnaam+sessie hoort

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

Hoe ben je van plan die session ID checksum en username precies bij te houden / door te geven?

Daarnaast, weet je wel hoeveel mogelijke sessie id's er zijn en hoe groot de kans is dat je de juiste gokt?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
je bedoelt dat het een btje zinloos is?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

Je bereikt hetzelfde effect door ipv 1 session ID random te genereren nu 2 session ID's random te genereren. Iets makkelijker, zelfde effect..

Ik denk dat je beter de eerder door mij genoemde ip-check in kunt bouwen. Desnoods voeg je nog een paar andere dingen toe (browser type, OS) die de bezoeker kunnen indentificeren om er ook voor te zorgen dat mensen achter NAT elkaars sessie niet over kunnen nemen waneer mensen elkaar een URL+getvar sessie ID gaan sturen..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
ok.
ik krijg me sessions niet aan de praat???
ik heb php 4.0.6 ( :( )
en in het eerste script zet ik de waarde zo:

PHP:
1
2
3
session_start();
session_register("user");
$HTTP_SESSION_VARS["user"] = "ja";


in het volgende script roep ik hem weer op:

PHP:
1
2
3
session_start();
$id = session_id();
print_r($HTTP_SESSION_VARS);


dan krijg ik als output:
55684b635d3c9dfb21e097d2d317b53f
Array ()

de session is wel dezelfde als in het eerste script maar de var wordt niet opgeslagen?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

Ik kan me herinneren dat session register een beetje buggy was. Ik weet het niet meer precies, maar waneer je globals uit had staan, dat je dan juist niet session register moest gebruiken, en als je deze aan had staan, dan werkte de $HTTP_SESSION_VARS array niet. Probeer eens de usernotes op de php.net door te nemen

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
is een session id niet op de één of de andere manier gekoppeld aan een gebruiker? d.m.v. een ip o.i.d?

Verwijderd

Topicstarter
Gelukt, zo lukt het wel:

PHP:
1
2
3
session_start();
session_register("user");
$user = "ja";


in het volgende script roep ik hem weer op:

PHP:
1
2
3
session_start();
$id = session_id();
print_r($HTTP_SESSION_VARS);


dan krijg ik als output:
55684b635d3c9dfb21e097d2d317b53f
Array ([user] => ja)

btje buggy code maja

  • pimlie
  • Registratie: November 2000
  • Laatst online: 01:01
Je hebt de oplossing dan al, maar hier de officiele verklaring van de php website
Caution
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered() and session_unregister().

  • Darius
  • Registratie: Juli 2001
  • Laatst online: 21:07
Als je nog verder vragen hebt is dit wel een leuke DOC die ik gevonden heb :

http://www.owasp.org/guide/

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Onlangs had ik het ook over beveiligen van websites. Nu stond in dat topic dat als mensen gaan sniffen aan je poort , ze makkelijk het sessie id etc kunnen achterhalen... is hier nu niks tegen te doen en heb zijn er ervaringen mee dat dit gebeurt is in de praktijk...? Ik ben hier wel heel erg benieuwd na.

Voor de rest vroeg ik me af of het veilig is als het volgende gebeurt:

-mensen loggen in.
-md5 van hun paswoord wordt opgeslagen in een cookie.
-md5 van hun paswoord wordt opgeslagen in de sessie.
-ip adres wordt opgeslagen in sessie.
-vervolgens wordt op elke beveiligde site een check gemaakt tussen sessie paswoord en cookie wachtwoord en tussen ip adres in sessie en ip van degene die het opvraagt.

Wat gebeurt er nuu als mensen geen cookies aan hebben staan. Dan werkt dit dus niet. Wat kan er nu gedaan worden, dat overeenkomt met bovenstaande.

Is het ook noodzakelijk dat als je zonder cookies werkt, je aan elke url het SID moet meegeven of gebeurt dat automatisch bij PHP?

Misschien moet ik een nieuw topic openen ik weet het niet!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

RSD schreef op 28 september 2002 @ 16:01:
Onlangs had ik het ook over beveiligen van websites. Nu stond in dat topic dat als mensen gaan sniffen aan je poort , ze makkelijk het sessie id etc kunnen achterhalen... is hier nu niks tegen te doen en heb zijn er ervaringen mee dat dit gebeurt is in de praktijk...? Ik ben hier wel heel erg benieuwd na.
Je stuurt je sessie id elke keer mee, als iemand dus je verkeer kan afluisteren kunnen ze ook je sessie ID te zien krijgen en die dan zel intikken. Dit heet "sessies kapen" of "session hijacking". Veel mensen denken dat het raden van je ID het probleem is, maar dat is niet zo. Het gaat erom dat je het ID afluistert.
Voor de rest vroeg ik me af of het veilig is als het volgende gebeurt:

-mensen loggen in.
Mensen zijn altijd een onveilige factor ;) (wel waar!) Het bekende Post-itje met je wachtwoord op het scherm geplakt...
-md5 van hun paswoord wordt opgeslagen in een cookie.
-md5 van hun paswoord wordt opgeslagen in de sessie.
MD5 klinkt allemaal heel leuk en veilig, maar is dat niet. Stel je gebruiker typed een wachtwoord in, je md5-ed dat, en stuurt het naar de server die het daar vergelijkt met de md5 hash in de database. Wachtwoord gaat nu niet over het net en kan niet worden afgeluisterd...veilig. toch? Niet dus. Ik luister gewoon je md5 hash af, en die stuur ik daarna rechtsreeks zonder met javascript te md5-en. Je server accepteert het wachtwoord vrolijk en zonder klagen. Dit heet "replay attack". een oplossing hiervoor is om steeds een random waarde naar de client te sturen, en de client moet die waarde dan meenemen in de md5 hash. De server doet hetzelfde en vergelijkt de twee hashen dan. Replay attack is dan niet meer mogelijk. Dit is een redleijk veilige manier om in te loggen. Het enige probleem nu zou zijn als iemand je verkeer aan kan passen/veranderen, of als "middle man" kan optreden, bv iemand met root access op een tussen liggende router. (zou de CIA toegang hebben tot alle grote routers? zeer waarschijnlijk...) Je kan dan relay
edit:
dit is geen type-fout voor replay, er staat echt relay zonder p
attacks doen...
-ip adres wordt opgeslagen in sessie.
Ja dat helpt tegen session hijacking, omdat je server nu weet welk IP by welk session ID hoort. Dit moet je eigenlijk altijd doen als voorzorg, helemaal omdat het zo simpel is. Problemen: mensen achter dezelfde proxy, IP spoofing. Je kan nu nog bv browser/OS versie er bij opslaan. Maar echt nut heeft het niet. Als je al aan neemt dat iemand je verkeer kan afluisteren, en je IP kunnen spoofen, dan kunnen ze natuurlijk ook je browser versie etc die jij naar de server stuurt afluisteren. Oplossing: stuur al je data encrypted...ofwel SSL.
-vervolgens wordt op elke beveiligde site een check gemaakt tussen sessie paswoord en cookie wachtwoord en tussen ip adres in sessie en ip van degene die het opvraagt.

Wat gebeurt er nuu als mensen geen cookies aan hebben staan. Dan werkt dit dus niet. Wat kan er nu gedaan worden, dat overeenkomt met bovenstaande.

Is het ook noodzakelijk dat als je zonder cookies werkt, je aan elke url het SID moet meegeven of gebeurt dat automatisch bij PHP?

Misschien moet ik een nieuw topic openen ik weet het niet!
Zoals je ziet is "goede" beveiliging erg lastig. Je moet je dan ook altijd af vragen "hoe veilig moet het eigenlijk zijn, en wat zijn de consequenties (sp?) als iemand m'n beveiliging kan omzeilen?" Is het een levensbedrijgende situatie als iemand hier op GoT onder een andere naam kan posten? Hmm...niet echt. Als ze moderator status kunnen verkrijgen? Best wel vervelend, maar niet al te erg. Als ze rechtsreeks in de databases kunnen schrijven? JA das wel naar... Zou het erg zijn als een terroristen groep toegang kan krijgen tot de coordinaten van kern onderzeeers? Behoorlijk.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

okee, laten we ervan uitgaan dat het niet levensbedreigend is, dan voldoet bovenstaande manier wel, inclusief die randomwaarde die je naar de client stuurt. Ik begrijp alleen niet hoe ik dat dan kan toepassen...of wat is een manier ervoor om zoiets te maken?

Verwijderd

[hier stond dus een hoop onzin]

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Ja maar je moet het id wel meesturen via de url anders werkt het niet, de server moet toch weten welke sessie ze moeten pakken. Of heb ik het nu helemaal verkeerd!

Verwijderd

RSD schreef op 28 september 2002 @ 18:59:
Ja maar je moet het id wel meesturen via de url anders werkt het niet, de server moet toch weten welke sessie ze moeten pakken. Of heb ik het nu helemaal verkeerd!
hmm, sorry, ik heb het nog even nagezocht en ik had net gewoon een complete vlaag van verstandsverbijstering, sorry!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Ok mensen, wie kan vertellen of het volgende okee is:

Men komt op de site. Een sessie wordt aangemaakt. Het sessie id wordt opgeslagen in een cookie. Nu gaat men bijvoorbeeld naar de inlogpagina om in te loggen. Hier vult men paswoord en naam in. Er wordt een check gedaan in de database of de combinatie klopt. Tevens wordt gekeken of de cookie met het sessie id overeenkomen met het sessie id. Als dit allemaal klopt, wordt een nieuwe sessie aangemaakt met daarin een hash van het wachtwoord en een key die om de 3 uur verandert. Deze hash wordt opgeslagen in een cookie en in een sessie variabele. Op elke pagina wordt nu een check gedaan naar ip en de hash.

Is dit een beetje safe en versandig of maakt het allemaal niet uit?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Stel ik (M) luister je lijn af tussen client (C) en server (S):

(C) komt op site.
(S) maakt sessie en stuurt (C) het ID (staat in pagina die geserved wordt)
(M) weet sessie ID nu ook

(C) slaat sessie ID op in cookie en stuurt nu steeds mee
(C) stuurt ingevulde username/wachtwoord naar (S)
(M) vangt dit beide af (als plaintekst hack klaar, als md5 hash, stuur volgende keer rechtstreeks md5 hash, replay attack, ook klaar)

(S) valideert username/password en sessie id, alles klopt.
(S) maakt nieuwe sessie aan, en stuurt ID naar (C)

(C) kijkt nieuwe pagina, stuurt session ID en password hash naar server
(M) vangt beide af

(M) stuurt session ID en hash naar server, maar IP klopt niet. Eventueel IP spoof. Maar dit is wel veilig genoeg denk ik.


Conclusie, de eerste keer dat je je wachtwoord stuurt, kan het afgevangen worden, en dan is je site gekraakt.

Voor een andere oplossing:
Zoijar schreef op 26 juli 2002 @ 13:20

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Dat random id, mag dat wel via een post worden meegestuurd? Zo nee, hoe kan ik anders het randnr aan client side en serverside gelijk krijgen?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je server genereert het, stuurt het naar de client in een "html" file. De client pakt dat samen met het wachtwoord en md5 hashed het, en stuurt dan pas de hash naar de server.

edit:
Vergeet ik gewoon wat ik wilde zeggen....tsssk. Je server houd die random bij in een sessie var nar het sturen voor de volgende page view


Het geeft niet als iemand die random waarde onderschept, ze weten toch het wachtwoord niet. En de waarde wordt mar 1 keer gebruikt ooit (die random heet "een nonce", number used once).

Eigenlijk is random dus niet helemaal correct, als iemand een tabel maakt van alle randoms met bijbehorende hashes die je afluisterd, en hetzelfde random getal komt een tweede keer voor, dan zou je snel in kunnen loggen...dit is eeeeeerg onwaarschijnlijk, en daar sloeg mn verjaardags probleem opmerking ook op.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Btw, je internet bankieren werkt ook zo. Dat "rekenmachinetje" dat je hebt waar je je bankpas in doet verhoogt gewoon steeds z'n nonce met 1. Het is namelijk niet erg als je toekomstige nonce's kan voorspellen want je hebt het wachtwoord er niet bij. Als de server een "te hoge" nonce krijg (dus je hebt lopen klooien met dat ding en codes gemaakt zonder in te loggen :P ) dan zet de server gewoon z'n volgende verwachte nonce op die die jij stuurt plus een. Als hij een te lage nonce krijgt gaan de alarm bellen aan, en wordt je IP etc gelogged :P Nooit afgevraagd hoe dat werkt? :)

Maar een webserver heeft geen permanent state, dus kan je niet steeds ophogen, je zal iets anders moeten vinden, en dan is random een goeie oplossing.

edit:
Van die remotes voor auto's om de deur open te doen werken ook zo...eigenlijk alles

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Voor de volledigheid dit nog even, ik doe dus het volgende:

User komt bij het inlogform aan, ik maak een sessie aan. Vervolgens voert de user zijn naam en wachtwoord in. Als de user op submit drukt, wordt het wachtwoord met md5 gehashed, erna wordt het sessieid er aangeplakt en vervolgens wordt dit ook weer md5 gehashed. Dit gebeurt allemaal clientside mbv Javascript. Nu wordt het zooitje allemaal verstuurd naar de server, inclusief het sessie id en de naam. Op de server aangekomen, wordt vergeleken of die gehashde zooi overeenkomt met dat wat in de database, dit wordt gechecked aan het sessieid dat wordt meegstuurd etc... Als het allemaal klopt, wordt een nieuwe sessie aangemaakt.

Erna wordt het paswoord en nog wat gegevens weer gehashed en in een sessie en een cookie opgeslagen..

Elke beveiligde pagina wordt toegankelijk als het cookie gelijk is aan de sessie variabelen etc...

Over dit laatste heb ik zo nog mn twijfels... tevens vroeg ik me af of ik als random nr het sessie id kan gebruiken en dit stuur ik dus ook mee via het formpje...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

hehe, nee nee... :P Het is veel simpeler, wacht zal ff voorbeeld posten zo...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je hebt deze file nodig, die moet je als md5.js in dezelfde directory zetten http://pajhome.org.uk/crypt/md5/md5.js


Hoop niet dat het te lang 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
<?php
/*
 * Secure MD5 Inlog voorbeeld. Letterlijk hergebruik niet toegestaan!
 * (Onder het motto, van knippen en plakken leer je alleen iets op de kleuterschool.)
 * Copyright 2002, Ferdi Smit
 */


/**
* Keep a session in an object and do some extra security checking
*
* @version  1.0
* @author   Ferdi Smit <smit@xs4all.nl>
*/

// a hack to get around the "session start in function bug"
session_start();

class Session {

    /**
    * Alias to the session vars ($_SESSION)
    *
    * @var      array   $registry
    */
    var $vars;

    /**
    * Constructs the session object
    *
    * @param    array   Session vars (usually $HTTP_SESSION_VARS or $_SESSION)
    * @access   public
    */
    function Session(&$session) {
        //session_start();

        $this->vars = &$session;
        $this->validate();
    }

    /**
    * Validate the session against the client IP
    * This is to prevent easy session hijacking
    *
    * @access   private
    */
    function validate() {
        $ip = ip2long($this->getip());
        if (!isSet($this->vars['Session_IP'])) {
            $this->vars['Session_IP'] = $ip;
        }
        if ($this->vars['Session_IP'] != $ip) {
            $this->vars = array();
            session_destroy();
            die('<B>Detected a session-hijack attempt from '.$ip.'. System administrator has been notified. Have a nice day.</B>');
        }
    }

    /**
    * Returns the client IP address
    *
    * @return   string  dotted IP address (ie. "192.168.1.2")
    * @access   public
    */
    function getip() {  
        global $HTTP_SERVER_VARS;
    
        if (isSet($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'])){ 
            $IP = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR']; 
        } else {
            $IP = $HTTP_SERVER_VARS['REMOTE_ADDR'];
        }
        return $IP;
    }
}

////////////////////////////////////////////////////

/**
* Webpage username/password login class.
* We use a double md5 hashed scheme with a nonce.
*
* @version  1.0a
* @author   Ferdi Smit <smit@xs4all.nl>
*/

/*
require_once('class/system/database.class.php');
define('C_SQL_LOGIN_USER', 'SELECT id, passw FROM books WHERE login = \'%s\'');
*/

class Login {
    /**
    * The random number (nonce) expected on login
    *
    * @var      long    $challenge
    */
    var $challenge;

    /**
    * The logged in user, empty if nobody is logged in
    *
    * @var      string  $user
    */
    var $user;

    /**
    * An array of extra allowed username/password pairs
    *
    * @var      array   $allows
    */
    var $allows;

    /**
    * An alias to the database
    *
    * @var      mixed   $CDatabase
    */
    var $CDatabase;

    /**
    * Constructs the login object, and aliases the session for the nonce
    *
    * @param    object  Database object
    * @param    object  Session object
    * @access   public
    */
    function Login(&$CDatabase, &$CSession) {
        // aliases the member vars to the global session
        $this->challenge = &$CSession->vars['login_challenge'];
        $this->user = &$CSession->vars['login_user'];
        
        // is this the first time we are constructed this session?
        if (!isSet($CSession->vars['login'])) {
            $CSession->vars['login'] = true;
            $this->challenge = 0;
            $this->user = '';
            $this->seed();
        }

        $this->CDatabase = &$CDatabase;
        $this->allows = array();
    }

    /**
    * Adds a username/password pair to the valid login list.
    *
    * @param    string  username
    * @param    string  password
    * @access   public
    */
    function allowFrom($user, $password) {
        $this->allows[$user] = $password;
    }

    /**
    * Constructs a new nonce.
    *
    * @access   public
    */
    function makeChallenge() {
        $this->challenge = $this->random();
    }

    /**
    * Returns the current expected nonce
    *
    * @return   int current nonce
    * @access   public
    */
    function getChallenge() {
        return $this->challenge;
    }

    /**
    * Try to login a user. Returns false on failure, true on success
    * getUser() will return the logged in user from now on
    *
    * @param    string  username
    * @param    string  password
    * @return   boolean Login correct?
    * @access   public
    */
    function doLogin($username, $passw) {
        if ($info = $this->findUser($username)) {
            if ($this->challenge != 0 && md5($info[1] . $this->challenge) == $passw) {
                $this->challenge = 0;
                $this->user = $info[0];
                return true;
            }
        }
        return false;
    }

    /**
    * Logs out the current user, if any.
    *
    * @access   public
    */
    function logout() {
        $this->user = '';
        $this->challenge = 0;
    }

    /**
    * Is there a valid logged on user?
    *
    * @return   boolean true-yes false-no
    * @access   public
    */
    function isLoggedOn() {
        return ($this->user != '');
    }

    /**
    * Returns the logged in user id
    *
    * @return   string  userid
    * @access   public
    */
    function getUser() {
        return $this->user;
    }

///////////////
/// PRIVATE ///
///////////////

    /**
    * Seed the random number generator.
    *
    * @access   private
    */
    function seed() {
        list($usec, $sec) = explode(' ', microtime());
        mt_srand((float) $sec + ((float) $usec * 100000));
    }

    /**
    * Returns a random number.
    *
    * @access   private
    */
    function random() {
        return mt_rand();
    }


    /**
    * Find the password/id pair for a given username, if any.
    *
    * @param    string  username
    * @return   FALSE if user not found, otherwise array of userid(0), password(1)
    * @access   private
    */
    function findUser($user) {
        if (isSet($this->allows[$user])) {
            $info = array();
            $info[0] = $user;
            $info[1] = $this->allows[$user];    
            return $info;
        } else {
/*          return $this->CDatabase->queryrow(sprintf(C_SQL_LOGIN_USER, addslashes($user)));*/
            return false;
        }
    }
}


//////////////////////////////////////////////


/* Heb hier ff wat adhoc moeite gedaan om de database er uit te halen... */
$CDatabase = null;
$CSession =& new Session($HTTP_SESSION_VARS);
$CLogin =& new Login($CDatabase, $CSession);

/* md5 wachtwoord dat normaal in database staat */
$CLogin->allowFrom('admin', md5('geheim'));

/* zijn we al ingelogd? */
if (!$CLogin->isLoggedOn()) {
    /* willen we nu inloggen? */
    if (isSet($HTTP_GET_VARS['username']) && isSet($HTTP_GET_VARS['password'])) {
        $CLogin->doLogin($HTTP_GET_VARS['username'], $HTTP_GET_VARS['password']);
        header('location: login.php');
        die();
    } else {
        /* display inlog form */
        $CLogin->makeChallenge();
        ?>
        <SCRIPT LANGUAGE="Javascript" SRC="md5.js"></SCRIPT>

        <SCRIPT LANGUAGE="Javascript">
            function MD5Login(f, rndval) {
                f.password.value = calcMD5(calcMD5(f.password.value) + rndval);
                return true;
            }
        </SCRIPT>

        <FORM NAME="Login" ACTION="login.php" METHOD="GET" onSubmit="javascript:return MD5Login(this, <?php print($CLogin->getChallenge());?>);">
        <DIV>Username: </DIV><INPUT TYPE="Text" NAME="username" VALUE="" /><BR />
        <DIV>Password: </DIV><INPUT TYPE="Password" NAME="password" VALUE="" /><BR />
        <INPUT TYPE="Submit" NAME="submit" VALUE="Login!"/>
        </FORM>
        <?php
        die();
    }
} else {
    print('Access granted!');
}


?>

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Ja hoe jij dat doorgeeft met md5 etc had ik ook al, alleen dat random getal dat snap ik niet, ik kan aan de clientside wel een random getal maken, maar dan moet hij aan de server kant dat random getal toch ook weten, anders komen de hashes die je gaat vergelijken toch niet overeen?

  • MisterData
  • Registratie: September 2001
  • Laatst online: 27-11 20:42
RSD schreef op 30 september 2002 @ 18:15:
Ja hoe jij dat doorgeeft met md5 etc had ik ook al, alleen dat random getal dat snap ik niet, ik kan aan de clientside wel een random getal maken, maar dan moet hij aan de server kant dat random getal toch ook weten, anders komen de hashes die je gaat vergelijken toch niet overeen?
Daarom moet je aan de serverkant een getal maken :) Dus je hebt twee files:

-- login.php Met het login-form (waarin je dus een challenge var ergens in een javascript zet en tegelijkertijd ook in een sessievar opslaat)

-- do_login.php, die de eerder gegenereerde nonce uit een sessie-var haalt

sim-pel ;)

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Ja zo zou het ook kunnen... dus bij het form maak je een getal aan sla je op in sessie en bij de andere haal je hem op, maar kan ik dan het volgende doen:

Session_start();
$rand = rand();
voer wat uit etc...
session_destroy();
session_start();

dus 2x session_start(); of lukt dat niet volgens mij niet, want ik heb het weleens geprobeerd.
Pagina: 1