Juiste manier voor controleren sessie
Code (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
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
<?php
// niet ingelogd
if(!isset($_SESSION['user_id']))
{
// Niet ingelogd
}
// controle op sessie
elseif(isset($_SESSION['user_id']) && ($_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'] || $_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']))
{
// Fout in sessie
}
// ingelogd kantoor
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'kantoor')
{
// User kantoor
}
// ingelogd werkplaats
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'werkplaats')
{
// User werkplaats
}
else
{
// Sessie niet compleet
}
?>
// niet ingelogd
if(!isset($_SESSION['user_id']))
{
// Niet ingelogd
}
// controle op sessie
elseif(isset($_SESSION['user_id']) && ($_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'] || $_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']))
{
// Fout in sessie
}
// ingelogd kantoor
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'kantoor')
{
// User kantoor
}
// ingelogd werkplaats
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'werkplaats')
{
// User werkplaats
}
else
{
// Sessie niet compleet
}
?>
Gewijzigd op 30/10/2010 10:42:45 door Mui ter
Je kan beter niet controleren op IP, dit kan veranderen tijden de sessie. Als je het echt veilig wil hebben, kan je bij elke request de session id veranderen.
Pim - op 30/10/2010 11:28:36:
Je kan beter niet controleren op IP, dit kan veranderen tijden de sessie.
Leg eens uit.
maar je zou ook een encrypted password mee kunnen geven in de sessie en controleren of het id en het wachtwoord bij elkaar horen.
Thomas de Roo op 30/10/2010 17:07:10:
Ik weet niet of het echt van toepassing is,
maar je zou ook een encrypted password mee kunnen geven in de sessie en controleren of het id en het wachtwoord bij elkaar horen.
maar je zou ook een encrypted password mee kunnen geven in de sessie en controleren of het id en het wachtwoord bij elkaar horen.
Nope.
Wachtwoord gebruik je alleen bij inloggen om te kijken of de correcte gebruiker inlogt.
Precies zoals ik zeg: van gebruikers bij oa grote bedrijven kan tijdens het browsen het IP adres veranderen.
Pim - op 30/10/2010 17:16:30:
@SanThe
Precies zoals ik zeg: van gebruikers bij oa grote bedrijven kan tijdens het browsen het IP adres veranderen.
Precies zoals ik zeg: van gebruikers bij oa grote bedrijven kan tijdens het browsen het IP adres veranderen.
Na uitloggen/inloggen, maar niet zomaar tijdens het internetten.
Via een proxy met meerdere adressen, kan het bij grote bedrijven zoals Pim al zei, altijd voorkomen dat je bij de volgende pagina die je opvraagt, via een ander IP adress naar buiten gaat, dan gaat dit systeem de fout in.
er zijn meer dan genoeg systemen die de optie hebben om een sessie aan een ip te binden.
Ik zou in z'n geval eerder zo iets gebruiken:
Code (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
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
<?php
/**
* @author Jasper
* @copyright 2010 vanOeffelHaarlem
*/
//alleen voor debugging nooit zo online zetten!
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$user_types = array('kantoor', 'werkplaats');
session_name('cookienaam');//gebruik een andere naam voor de cookie dan de standaard php naam
if(!session_start()){
exit("Er is een fout opgetreden in het programma");
}
/**
* sessie tijd instellen
*/
if (!isset($_SESSION['timeout_idle'])) {
$_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME;
}
else {
if ($_SESSION['timeout_idle'] < time()) {
//destroy session
} else {
$_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME;
}
}
if(!isset($_SESSION['user_id']) || !in_array($_SESSION['user_type'], $user_types)){
session_destroy(); //vernietig alle sessie data
session_regenerate_id(); //maak een nieuwe session
exit("Niet ingelogd"); //of verkeerd ingelogd
}
/**
* controleer op user agent van de client en kijk of het SID door de server is aangemaakt.
*/
if (($_SERVER['HTTP_USER_AGENT'] != $_SESSION['PREV_USERAGENT']) || (!isset($_SESSION['SERVER_GENERATED_SID'])) ) {
session_destroy(); //vernietig alle sessie data
session_regenerate_id(); //maak een nieuwe session
}
?>
/**
* @author Jasper
* @copyright 2010 vanOeffelHaarlem
*/
//alleen voor debugging nooit zo online zetten!
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$user_types = array('kantoor', 'werkplaats');
session_name('cookienaam');//gebruik een andere naam voor de cookie dan de standaard php naam
if(!session_start()){
exit("Er is een fout opgetreden in het programma");
}
/**
* sessie tijd instellen
*/
if (!isset($_SESSION['timeout_idle'])) {
$_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME;
}
else {
if ($_SESSION['timeout_idle'] < time()) {
//destroy session
} else {
$_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME;
}
}
if(!isset($_SESSION['user_id']) || !in_array($_SESSION['user_type'], $user_types)){
session_destroy(); //vernietig alle sessie data
session_regenerate_id(); //maak een nieuwe session
exit("Niet ingelogd"); //of verkeerd ingelogd
}
/**
* controleer op user agent van de client en kijk of het SID door de server is aangemaakt.
*/
if (($_SERVER['HTTP_USER_AGENT'] != $_SESSION['PREV_USERAGENT']) || (!isset($_SESSION['SERVER_GENERATED_SID'])) ) {
session_destroy(); //vernietig alle sessie data
session_regenerate_id(); //maak een nieuwe session
}
?>
Zo druk ik bij het inloggen een code genaamt hash in de database en maak een sessie an, ik vergelijk of de sessie overkomt als met die van de gekoppelde user in de database. Komen deze 2 niet overeen dan is een van de sessies veranderd.
Code (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
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
<?php
$user_types = array('kantoor', 'werkplaats');
// start session
if(!session_start())
{
exit("Er kan geen session worden gestart");
}
//gebruik een andere naam voor de cookie dan de standaard php naam
session_name('what_ever');
// controleer of de user gebruikt maakt van dezelfde user agent als bij voorgaande request en accepteer alleen door server gegenereerde SID's
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['PREV_USERAGENT']) || !isset($_SESSION['SERVER_GENERATED_SID'])
{
session_destroy();
}
if(!isset($_SESSION['user_id']) || !in_array($_SESSION['user_type'], $user_types))
{
exit("Niet of verkeerd ingelogd");
}
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
// ingelogd als kantoor
if(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'kantoor')
{
// User kantoor
}
// ingelogd als werkplaats
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'werkplaats')
{
// User werkplaats
}
else
{
exit("Geen informatie beschikbaar");
}
?>
$user_types = array('kantoor', 'werkplaats');
// start session
if(!session_start())
{
exit("Er kan geen session worden gestart");
}
//gebruik een andere naam voor de cookie dan de standaard php naam
session_name('what_ever');
// controleer of de user gebruikt maakt van dezelfde user agent als bij voorgaande request en accepteer alleen door server gegenereerde SID's
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['PREV_USERAGENT']) || !isset($_SESSION['SERVER_GENERATED_SID'])
{
session_destroy();
}
if(!isset($_SESSION['user_id']) || !in_array($_SESSION['user_type'], $user_types))
{
exit("Niet of verkeerd ingelogd");
}
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
// ingelogd als kantoor
if(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'kantoor')
{
// User kantoor
}
// ingelogd als werkplaats
elseif(isset($_SESSION['user_id']) && $_SESSION['user_type'] == 'werkplaats')
{
// User werkplaats
}
else
{
exit("Geen informatie beschikbaar");
}
?>
Kan iemand het instellen van de sessie tijd nader uitleggen?
Wat betreft de levensduur van een sessie, daar heb je geen invloed op aangezien dat in php.ini bepaald wordt. Je kunt dus niet zoals met een cookie een expiration time aangeven...
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
?>
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
?>
Dat wil je hoog uit doen als je denkt dat iemand fout is ingelogd?
En je bent op regel 15 twee haakjes vergeten.
Code (php)
Gewijzigd op 31/10/2010 12:46:06 door jasper hoi
Blanche PHP op 31/10/2010 12:32:44:
Let erop dat session_destroy() niet de inhoud van de superglobal $_SESSION beïnvloedt. Deze zul je zelf nog handmatig moeten unsetten aangezien ze anders gewoon nog beschikbaar zijn in dit script.
Ok, thx. Dus session_unset(); toevoegen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
?>
// generate nieuwe sessie id
session_regenerate_id();
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'];
?>
Heb ik uit de wiki http://en.wikipedia.org/wiki/Session_fixation
Gewijzigd op 31/10/2010 15:15:25 door Mui ter
Mui ter op 31/10/2010 15:14:17:
Ok, thx. Dus session_unset(); toevoegen.
Nee, juist niet. Zie php.net:
Quote:
If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, use unset() to unregister a session variable, i.e. unset ($_SESSION['varname']);.
Gebruik dus gewoon iets als:
index.php
Code (php)
<div id="page">
<div>
<div id="content">
Code (php)
</div>
</div>
<div style="clear: both;"> </div>
</div>
sessions.php
Code (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
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
<?php
//gebruik een andere naam voor de sessie dan de standaard php naam
session_name('what_ever');
// start session
if(!session_start())
{
exit("Er kan geen sessie worden gestart");
}
// generate nieuwe sessie id
session_regenerate_id();
$user_types = array('beheerder', 'kantoor', 'werkplaats');
// controleer of de user gebruikt maakt van dezelfde user agent als bij voorgaande request en accepteer alleen door server gegenereerde SID's
if (($_SERVER['REMOTE_ADDR'] != $_SESSION['USER_IP']) || !isset($_SESSION['SERVER_GENERATED_SID']))
{
session_destroy();
}
// sla variabelen op
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['USER_IP'] = $_SERVER['REMOTE_ADDR'];
?>
//gebruik een andere naam voor de sessie dan de standaard php naam
session_name('what_ever');
// start session
if(!session_start())
{
exit("Er kan geen sessie worden gestart");
}
// generate nieuwe sessie id
session_regenerate_id();
$user_types = array('beheerder', 'kantoor', 'werkplaats');
// controleer of de user gebruikt maakt van dezelfde user agent als bij voorgaande request en accepteer alleen door server gegenereerde SID's
if (($_SERVER['REMOTE_ADDR'] != $_SESSION['USER_IP']) || !isset($_SESSION['SERVER_GENERATED_SID']))
{
session_destroy();
}
// sla variabelen op
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['USER_IP'] = $_SERVER['REMOTE_ADDR'];
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// gegevens sessie
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_user'] = $row['user'];
$_SESSION['user_name'] = $row['naam'];
$_SESSION['user_mail'] = $row['email'];
$_SESSION['user_type'] = $row['type'];
$_SESSION['user_lang'] = $row['language'];?>
// gegevens sessie
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_user'] = $row['user'];
$_SESSION['user_name'] = $row['naam'];
$_SESSION['user_mail'] = $row['email'];
$_SESSION['user_type'] = $row['type'];
$_SESSION['user_lang'] = $row['language'];?>