Session stealing

Gestart doorRik6 reacties41 weergaven

7 berichten · pagina 1 van 1

Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Heya,

Ik ben bezig met een loginsysteempje en nu heb ik 2 tabbelen:

Member_login
en
Member_session

In beide staat een row hash waarin dus (duidelijk) een hash gezet gaat worden. Maar nu wil ik dus zorgen dat als je inlogd dat het ip-adres(of naam) bijvoorbeeld gehashed word en dan in beide tabbellen wordt gezet. Maar hoe kan ik dus zorgen dat die 2 tabbelen met elkaar in contact staan.
Want ik heb in een tutorial gelezen dat als je een apparte session tabel hebt dat je daarmee sessionstealing tegen kan houden.
Maarja, hoe check ik dus nu precies of de ingelogde sessie overeenkomt met de gebruiker in login?

Hopelijk snap je me een beetje..
~ Rik
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Je zet in een sessie of een cookie een unieke code, die je ook in member_session zet.
Je zet géén wachtwoorden, gebruikersnamen, user-ids of wat dan ook in cookies; alleen die unieke code.
Dan kijk je bij elk bezoek of die cookie bestaat, en zo ja of hij in de tabel member_session voorkomt.
Als dat ook zo is kijk je bij welk user_id hij hoort en check je ook nog of het IP adres van de bezoeker overeenkomt met het IP adres die je ook in member_session hebt opgeslagen.
Daarna weet je dus op welk account iemand is ingelogd.

Dus kort:
$_COOKIE[code] = 1233f;
tabel member_session:
id | user_id | ip        | code
1  | 1       | 127.0.0.1 | 1233f


Dan controleren:

[COLOR= #0000BB]<?php
$ingelogd[/COLOR] [COLOR= #007700]=[/COLOR] FALSE[COLOR= #007700];[/COLOR]

[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]code[/COLOR][COLOR= #007700]]))
{[/COLOR]

    [COLOR= #0000BB]$check[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT user_id FROM member_session WHERE ip = "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REMOTE_ADDR[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]" AND code = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]code[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
    
    [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/mysql_num_rows"]mysql_num_rows[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$check[/COLOR][COLOR= #007700]) ===[/COLOR] [COLOR= #0000BB]1[/COLOR][COLOR= #007700])
    {[/COLOR]
        
        [COLOR= #0000BB]$fetch[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_fetch_assoc"]mysql_fetch_assoc[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$check[/COLOR][COLOR= #007700]);[/COLOR]
        [COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]userid[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #0000BB]$fetch[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]user_id[/COLOR][COLOR= #007700]];[/COLOR]
        [COLOR= #0000BB]$ingelogd[/COLOR] [COLOR= #007700]=[/COLOR] TRUE[COLOR= #007700];
        
    }
    
}[/COLOR]

[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Je bent [/COLOR][COLOR= #007700].([/COLOR][COLOR= #0000BB]$ingelogd[/COLOR] [COLOR= #007700]===[/COLOR] TRUE [COLOR= #007700]?[/COLOR] [COLOR= #DD0000][/COLOR] [COLOR= #007700]:[/COLOR] [COLOR= #DD0000]niet [/COLOR][COLOR= #007700]).[/COLOR][COLOR= #DD0000]ingelogd.[/COLOR][COLOR= #007700];[/COLOR]
?>


Zo zou ik t iig doen. biggrin
Edit:
Waar is die tabel Member_login überhaupt voor?
Houd trouwens de tabel- en kolomnamen allemaal in kleine letters, geen idee of je dat al doet, maar ik zeg t maar ff. emo
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
ja sorry, had ff snel getypt,
login_members en login_sessions heten ze

login_members -> alle logingegevens van gebruikers, email, wachtwoord enzovoorts
login_sessions -> userid, ip, hash(code dus)
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Dan kun je het doen zoals ik t zei.
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Okee, ik zal eens kijken smile
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Jup werkt perfect, maar is het slim om voor de code bijvoorbeeld een hash van de ip adres of een hash te maken van random gekozen letters & cijfers?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Hash van IP adres zou ik niet doen omdat hij echt uniek moet zijn; bij een hash van een IP adres is hij dat niet en kan je broer oid in theorie op jouw account ingelogd zijn.

Ik zou gewoon md5(microtime(TRUE)) nemen, de kans dat er dan een dubbele code tussen zit is heel klein.
Maak het veld code in je tabel wel voor de zekerheid uniek (ALTER TABLE member_session ADD UNIQUE (code))
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren