Forum » Server-Side scripting » Cookie beveiligen.
Berichten: 411
avatar
Online Stuur privebericht
Hey cp,

Bij mijn inlog script krijgt de cookie een hash toegevoegt. Echter had ooit is een keer een speler toch op een 1 of andere manier de cookie aangepast naar mijn admin account, waardoor hij misbruik maakte van bepaalde opties.

Ja het is een tijd geleden, ik heb veel beveiligingen gedaan, maar ik ben toch nog bang voor een vervolg.

Hoe kan ik goed mijn cookie beveiligen?

Groetjes,
Sukel
Laatst gewijzigd door sukel op 2011-09-12 20:44:43
12-09-2011 20:44
Dit topic is 180 keer bekeken door 38 verschillende leden
Reacties op: "Cookie beveiligen."
1
Eigenaar DiMoWeb
Berichten: 2400
avatar
Offline Stuur privébericht
Hoe wordt je hash opgebouwd?
Misschien heeft hij zijn eigen hash kunnen ontcijferen en heeft hij zo de jouwe kunnen namaken.

Als je hash bv een encryptie is van je username, dan is dat eenvoudig te vinden.

Best maak je een hash met een salt erin.
En salt is een vast woord of zin die je toevoegt voor of na het wachtwoord.

Bv: mijn wachtwoord is huis
In mijn code zet ik een vaste salt, voor iedere gebruiker hetzelfde, namelijk hallo

Dan ga ik volgende encrypteren:
Code | Selecteer Alles
minimaliseren
1
2
3
$wachtwoord='huis';
$salt='hallo';
echo 
md5($wachtwoord.$salt);


Eventueel kun je unieke gegevens bij in de hash steken, zoals de id van de user in je database, die weten ze meestal bv niet zelf.

Mvg,
K
12-09-2011 21:15
Berichten: 401
avatar
Offline Stuur privébericht
Ik wil niet offtopic gaan hoor sukel.
Maar als ik goed gelezen heb mogen cookies niet meer vanaf binnenkort.
Hiervoor moet je dan een scriptje maken om voor elke keer toestemming te vragen.
Beste is met sessies te werken eigenlijk als je het meteen goed wilt doen.


Beste redenen is via koen denk ik zo heb je beste beveiliging.
12-09-2011 21:26
Berichten: 411
avatar
Online Stuur privébericht
Gaan cookies eruit!?

@k rens.

Ik zal is even kijken of ik hier wat mee kan.
12-09-2011 21:34
Eigenaar DiMoWeb
Berichten: 2400
avatar
Offline Stuur privébericht
Europa is aan het vechten met de wereld om alle cookies eerst opt-in te maken. Dat je bezoeker moet akkoord gaan dat we cookies op je pc zetten.
Voorlopig nog niets van aantrekken.
Als Europa dit erdoor duwt, gaan vele sites problemen hebben en komt op elke site gewoon eerst de vraag om de cookies te aanvaarden.

Gewoon cookies gebruiken en waar kan kritiek uiten op deze maatregel van 1 onwetende mens binnen Europa, de rest ervan is wel goed


Indien iemand meer hierover wil weten, start een nieuw topic aub.
Dit hoort hier niet.

Ok, succes.
Maar moet zeker lukken. :-)
12-09-2011 21:37
Berichten: 470
avatar
Offline Stuur privébericht
Ten eerste, gebruik sessions en geen cookies,
Cookies zijn eenvoudig aan te passen, en dus niet veilig.

Verder zou je een session kunnen koppelen aan IP, en desnoods browseragent er ook nog bij.

En ook kijken of ze niet via XSS je cookie hebben bemachtigd, inplaats dat die een cookie heeft aangepast.

wat html_entities doet wonderen op berichten, profiel, forum enzovoort.

Verder zou je session_regenerate_id kunnen gebruiken, bijvoorbeeld een bepaalde tijd instellen (10 minuten?) in de session, en als die tijd over is de tijd weer aanpassen en session_regenerate_id gebruiken om een nieuwe session aan te maken (Vergeet niet de oude te verwijderen)

Zo zouden ze met XSS alsnog binnen 10 minuten de cookie gebruiken, en desnoods in combinatie met IP check en browseragent check.

Offtopic: Vind het geen probleem dat je cookies moet toestaan, eigenlijks wel fijn zelfs.
Maar hoop wel dat de browsers het onthouden of je de cookies wilt onthouden of niet voor een bepaalde website.

Edit:
Even een voorbeeld van php.net die werd geplaatst door een gebruiker, is dus niet door mij gemaakt!

Code | Selecteer Alles
minimaliseren
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
<?php
function regenerateSession($reload false)
{
    
// This token is used by forms to prevent cross site forgery attempts
    
if(!isset($_SESSION['nonce']) || $reload)
        
$_SESSION['nonce'] = md5(microtime(true));

    if(!isset(
$_SESSION['IPaddress']) || $reload)
        
$_SESSION['IPaddress'] = $_SERVER['REMOTE_ADDR'];

    if(!isset(
$_SESSION['userAgent']) || $reload)
        
$_SESSION['userAgent'] = $_SERVER['HTTP_USER_AGENT'];

    
//$_SESSION['user_id'] = $this->user->getId();

    // Set current session to expire in 1 minute
    
$_SESSION['OBSOLETE'] = true;
    
$_SESSION['EXPIRES'] = time() + 60;

    
// Create new session without destroying the old one
    
session_regenerate_id(false);

    
// Grab current session ID and close both sessions to allow other scripts to use them
    
$newSession session_id();
    
session_write_close();

    
// Set session ID to the new one, and start it back up again
    
session_id($newSession);
    
session_start();

    
// Don't want this one to expire
    
unset($_SESSION['OBSOLETE']);
    unset(
$_SESSION['EXPIRES']);
}

function 
checkSession()
{
    try{
        if(
$_SESSION['OBSOLETE'] && ($_SESSION['EXPIRES'] < time()))
            throw new 
Exception('Attempt to use expired session.');

        if(!
is_numeric($_SESSION['user_id']))
            throw new 
Exception('No session started.');

        if(
$_SESSION['IPaddress'] != $_SERVER['REMOTE_ADDR'])
            throw new 
Exception('IP Address mixmatch (possible session hijacking attempt).');

        if(
$_SESSION['userAgent'] != $_SERVER['HTTP_USER_AGENT'])
            throw new 
Exception('Useragent mixmatch (possible session hijacking attempt).');

        if(!
$this->loadUser($_SESSION['user_id']))
            throw new 
Exception('Attempted to log in user that does not exist with ID: ' $_SESSION['user_id']);

        if(!
$_SESSION['OBSOLETE'] && mt_rand(1100) == 1)
        {
            
$this->regenerateSession();
        }

        return 
true;

    }catch(
Exception $e){
        return 
false;
    }
}

?>
13-09-2011 13:25
Reageer op: "Cookie beveiligen."
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden