Cookies
Hela hola kindercola!
ik probeer een aantal cookies te zetten in mijn loginclass...
Nu kan ik deze cookies wel echo-en in mijn loginfuncties, maar daar buiten niet.
Ik denk dat er iets best heel erg fout gaat, ik heb echt nog nooit cookies gebruikt dus vrij weinig verstand ervan :D
hierbij mijn koekjes:
ik probeer een aantal cookies te zetten in mijn loginclass...
Nu kan ik deze cookies wel echo-en in mijn loginfuncties, maar daar buiten niet.
Ik denk dat er iets best heel erg fout gaat, ik heb echt nog nooit cookies gebruikt dus vrij weinig verstand ervan :D
hierbij mijn koekjes:
Waar set je ze? Hopelijk voordat je al iets naar de browser hebt gestuurd.
Weet je zeker dat je al die $row-> dingen kan benaderen?
Je hoeft al die dingen ook niet in een cookie zetten, meestal wordt er een aparte hash (md5 bijvoorbeeld) gemaakt met de user_agent en ip, aangezien cookies nogal fraude gevoellig zijn.
Als je dan gaat kijken naar de inhoud van een cookie, moet die dus gelijk zijn aan wat je eerder had (wat je opslaat in de db).
Nu heb je eigenlijk een session manager.
Edit: Mijn punt is dus dat je cookie's ontzetten makkelijk gekaapt kunnen worden, als je die zooi dan in je cookie's zet en die zijn nodig om ingelogd te zijn, dan ben je slecht bezig.
En je kunt (geloof ik) niet direct zien dat de cookies zijn geset met $_COOKIE.
Weet je zeker dat je al die $row-> dingen kan benaderen?
Je hoeft al die dingen ook niet in een cookie zetten, meestal wordt er een aparte hash (md5 bijvoorbeeld) gemaakt met de user_agent en ip, aangezien cookies nogal fraude gevoellig zijn.
Als je dan gaat kijken naar de inhoud van een cookie, moet die dus gelijk zijn aan wat je eerder had (wat je opslaat in de db).
Nu heb je eigenlijk een session manager.
Edit: Mijn punt is dus dat je cookie's ontzetten makkelijk gekaapt kunnen worden, als je die zooi dan in je cookie's zet en die zijn nodig om ingelogd te zijn, dan ben je slecht bezig.
En je kunt (geloof ik) niet direct zien dat de cookies zijn geset met $_COOKIE.
het is ook bedoelt als session manager eigenlijk...
Zodat mensen niet iedere keer opnieuw hoeven inloggen als ze de site benaderen...
Heb de cookies overigens werkende nu, geen idee hoe, het werkte gewoon ineens xD
Ook een idee hoe ik ze bij het handmatig uitloggen kan weghalen? Als je nu uitlogt, blijf je door de cookies ingelogt :P
Zodat mensen niet iedere keer opnieuw hoeven inloggen als ze de site benaderen...
Heb de cookies overigens werkende nu, geen idee hoe, het werkte gewoon ineens xD
Ook een idee hoe ik ze bij het handmatig uitloggen kan weghalen? Als je nu uitlogt, blijf je door de cookies ingelogt :P
Gewijzigd op 01/01/1970 01:00:00 door Timen kut
Voorbeeld 2 en Common Pitfalls op php.net (natuurlijk in het engels).
Voor firefox moet je een of andere plugin installeren geloof ik. Opera kan uitzichzelf al cookie's editten / verwijderen ( rechts klikken op pagina -> Edit site preferences -> Cookies tab).
Voor firefox moet je een of andere plugin installeren geloof ik. Opera kan uitzichzelf al cookie's editten / verwijderen ( rechts klikken op pagina -> Edit site preferences -> Cookies tab).
Hmm, dus eigenlijk stel jij dat je cookies beter niet kunt gebruiken voor het ingelogt houden van een persoon?
Staat gewoon op php.net.
setcookie(naam,,time()-1);
Waarom jij dacht dat het niet werkte, komt misschien omdat een cookie pas op te vragen is na een refresh, en is dus niet, zoals bij een sessie, direct te gebruiken.
Wat Karl bedoelt, is dat je geen gevoelige informatie moet opslaan in een cookie, een cookie is niks anders een dan tekstbestandje op de computer van je bezoeker. Die kan je dus aanpassen. Als ik bij jouw cookie, de admin op 1 zet, zou ik dan ingelogd zijn als admin? Dat kon hier op PHPhulp bijvoorbeeld lange tijd wel ^^
setcookie(naam,,time()-1);
Waarom jij dacht dat het niet werkte, komt misschien omdat een cookie pas op te vragen is na een refresh, en is dus niet, zoals bij een sessie, direct te gebruiken.
Wat Karl bedoelt, is dat je geen gevoelige informatie moet opslaan in een cookie, een cookie is niks anders een dan tekstbestandje op de computer van je bezoeker. Die kan je dus aanpassen. Als ik bij jouw cookie, de admin op 1 zet, zou ik dan ingelogd zijn als admin? Dat kon hier op PHPhulp bijvoorbeeld lange tijd wel ^^
'Timen:
Hmm, dus eigenlijk stel jij dat je cookies beter niet kunt gebruiken voor het ingelogt houden van een persoon?
Jawel, maar je moet het dus op de juiste manier doen :-). Je moet geen gevoelige info in een cookie zetten, maar een unieke id, die aan de hand van vaste feiten (zoals ip en browser agent) moet genereren.
Oh xD das niet wijs nee...
maar een username en userID is geen gevoelige info, dus dat kan ik gewoon in een cookie stampen...
Zou ik dan niet aan de hand van de cookies die ik heb een query uitvoeren om de admin status te achterhalen, en die dan in een sessie te stampen naast mijn cookies?
Zodat alleen username en userID in een cookie staat, en de admin steeds opnieuw wordt opgehaald en in een sessie wordt gezet.
maar een username en userID is geen gevoelige info, dus dat kan ik gewoon in een cookie stampen...
Zou ik dan niet aan de hand van de cookies die ik heb een query uitvoeren om de admin status te achterhalen, en die dan in een sessie te stampen naast mijn cookies?
Zodat alleen username en userID in een cookie staat, en de admin steeds opnieuw wordt opgehaald en in een sessie wordt gezet.
'Karl:
die aan de hand van vaste feiten (zoals ip en browser agent) moet genereren.
Uhm, auw? Sinds wanneer zijn een IP en een UserAgent vast feiten?
'Timen:
Oh xD das niet wijs nee...
maar een username en userID is geen gevoelige info, dus dat kan ik gewoon in een cookie stampen...
Zou ik dan niet aan de hand van de cookies die ik heb een query uitvoeren om de admin status te achterhalen, en die dan in een sessie te stampen naast mijn cookies?
Zodat alleen username en userID in een cookie staat, en de admin steeds opnieuw wordt opgehaald en in een sessie wordt gezet.
maar een username en userID is geen gevoelige info, dus dat kan ik gewoon in een cookie stampen...
Zou ik dan niet aan de hand van de cookies die ik heb een query uitvoeren om de admin status te achterhalen, en die dan in een sessie te stampen naast mijn cookies?
Zodat alleen username en userID in een cookie staat, en de admin steeds opnieuw wordt opgehaald en in een sessie wordt gezet.
In feite is een userid ook gevoelige informatie. Als ik nu een willekeurig ID verzin, dan ben ik dus ingelogd als die gebruiker? Gebruikersnaam is er meestal wel bij te zoeken. Sla het op zodat het lijkt als het nutteloze informatie is. Zoals een sha1 van het userid+username+salt. Jij kan dan controlleren of die gegevens bij elkaar kloppen.
edit: Sorry SanThe!
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
'WillemJan:
Uhm, auw? Sinds wanneer zijn een IP en een UserAgent vast feiten?
'Karl:
die aan de hand van vaste feiten (zoals ip en browser agent) moet genereren.
Uhm, auw? Sinds wanneer zijn een IP en een UserAgent vast feiten?
Oke. Die dingen zijn niet helemaal 100% te vertrouwen, maar toch moet je op iets vertrouwen. Natuurlijk is de useragent ook te veranderen, als je het ip wilt veranderen, dan moet je wel wat moeilijker doen.
Alleen een willekeurige gegenereerde id is ook niet te vertrouwen.
Timen, je kunt bijvoorbeeld ook eens kijken hoe bepaalde framworks zoals CakePHP of zend het doen.
Dan moet je op het laatst wel belachelijk veel checks uitvoeren om maar te zien of iemand ingelogt is en de boel veilig is >_<
verder kan ik bij het inloggen niet mijn cookies achteruit zetten, omdat er dan al headers verstuurd zijn...
verder kan ik bij het inloggen niet mijn cookies achteruit zetten, omdat er dan al headers verstuurd zijn...
'Timen:
Dan moet je op het laatst wel belachelijk veel checks uitvoeren om maar te zien of iemand ingelogt is en de boel veilig is >_<
De gebruiker is per definitie niet te vertrouwen, hackers natuurlijk al helemaal niet (naja, je hebt ook white en gray hackers, ik generaliseer effe).
'Timen:
verder kan ik bij het inloggen niet mijn cookies achteruit zetten, omdat er dan al headers verstuurd zijn...
Dan moet je zorgen dat je dat doet voordat er data naar de browser is gestuurd.
ik heb nu in de DB een md5 op het ID bijgezet(eerste 2 karakters), een md5 van de username(eerste 10 karakters) en een salt (md5 van random 1,10 * random 1,10).
Die zet ik in een variabel
en voer dan bij alles waar je bij ingelogged moet wezen of die meuk klopt dmv
en de check checkChalk:
is dit betrouwbaar?
Die zet ik in een variabel
en voer dan bij alles waar je bij ingelogged moet wezen of die meuk klopt dmv
Code (php)
en de check checkChalk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function checkChalk($chalk){
if(!empty($chalk)){
$expl = explode('::', $chalk);
$query = "SELECT idmd, usermd, salt
FROM hk_users_DNT
WHERE idmd='".mysql_real_escape_string($expl['0'])."'
AND usermd='".mysql_real_escape_string($expl['1'])."'
AND salt='".mysql_real_escape_string($expl['2'])."'";
$result = mysql_query($query);
if($result){
return true;
}else{
return false;
}
}
}
?>
function checkChalk($chalk){
if(!empty($chalk)){
$expl = explode('::', $chalk);
$query = "SELECT idmd, usermd, salt
FROM hk_users_DNT
WHERE idmd='".mysql_real_escape_string($expl['0'])."'
AND usermd='".mysql_real_escape_string($expl['1'])."'
AND salt='".mysql_real_escape_string($expl['2'])."'";
$result = mysql_query($query);
if($result){
return true;
}else{
return false;
}
}
}
?>
is dit betrouwbaar?
Gewijzigd op 01/01/1970 01:00:00 door Timen kut
Je salt e.d. scheiden door :: neemt al het nut van de salt weg zo ongeveer.
Maar je hebt het over de 1e zoveel tekens, maar vervolgens vergelijk je de complete string?
Wat een andere/extra oplossing is, een extra veld in je database met daarin een sleutel. Bijvoorbeeld iets dat verbonden is met de tijd dat iemand ingelogd is. Als je dat in een aparte cookie opslaat en vergelijkt met zijn bezoek, heb je al meer zekerheid dat diegene is ingelogd.
Maar je hebt het over de 1e zoveel tekens, maar vervolgens vergelijk je de complete string?
Wat een andere/extra oplossing is, een extra veld in je database met daarin een sleutel. Bijvoorbeeld iets dat verbonden is met de tijd dat iemand ingelogd is. Als je dat in een aparte cookie opslaat en vergelijkt met zijn bezoek, heb je al meer zekerheid dat diegene is ingelogd.
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Omdat in de DB ook alleen de eerste zoveel tekens staan van die namen.
het splitsen van :: is inderdaad wel vrij nutteloos achteraf
het splitsen van :: is inderdaad wel vrij nutteloos achteraf
Oh ik zie het, je slaat ze apart op.. Tja, kan, niet ideaal, maar het kan :)
MySQL heeft ook gewoon functies als SUBSTR hoor :)
Deze query zou de md5 van de eerste 10 tekens van de username, de md5 van de eerste 2 tekens van het id en het veld 'salt' vergelijken met de inhoud van je cookie.
edit: Is niet getest btw :P
MySQL heeft ook gewoon functies als SUBSTR hoor :)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql = "SELECT id, userlvl FROM users
WHERE
CONCAT(MD5(SUBSTR(username,0,10)),MD5(SUBSTR(id,0,2)),salt) = '".$_COOKIE['chalk']."';";
?>
$sql = "SELECT id, userlvl FROM users
WHERE
CONCAT(MD5(SUBSTR(username,0,10)),MD5(SUBSTR(id,0,2)),salt) = '".$_COOKIE['chalk']."';";
?>
Deze query zou de md5 van de eerste 10 tekens van de username, de md5 van de eerste 2 tekens van het id en het veld 'salt' vergelijken met de inhoud van je cookie.
edit: Is niet getest btw :P
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Die heb ik nu zelf al toegepast:P toch bedankt
'Timen:
ik heb nu in de DB een md5 op het ID bijgezet(eerste 2 karakters), een md5 van de username(eerste 10 karakters) en een salt (md5 van random 1,10 * random 1,10).
Die zet ik in een variabel
en voer dan bij alles waar je bij ingelogged moet wezen of die meuk klopt dmv
en de check checkChalk:
is dit betrouwbaar?
Die zet ik in een variabel
en voer dan bij alles waar je bij ingelogged moet wezen of die meuk klopt dmv
Code (php)
en de check checkChalk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function checkChalk($chalk){
if(!empty($chalk)){
$expl = explode('::', $chalk);
$query = "SELECT idmd, usermd, salt
FROM hk_users_DNT
WHERE idmd='".mysql_real_escape_string($expl['0'])."'
AND usermd='".mysql_real_escape_string($expl['1'])."'
AND salt='".mysql_real_escape_string($expl['2'])."'";
$result = mysql_query($query);
if($result){
return true;
}else{
return false;
}
}
}
?>
function checkChalk($chalk){
if(!empty($chalk)){
$expl = explode('::', $chalk);
$query = "SELECT idmd, usermd, salt
FROM hk_users_DNT
WHERE idmd='".mysql_real_escape_string($expl['0'])."'
AND usermd='".mysql_real_escape_string($expl['1'])."'
AND salt='".mysql_real_escape_string($expl['2'])."'";
$result = mysql_query($query);
if($result){
return true;
}else{
return false;
}
}
}
?>
is dit betrouwbaar?
Nee, want je zet weer alles in de cookie's, dus als ik alle je cookie's steel, ben ik ingelogd.
Hoe wil jij mijn cookies stelen? Cookies staan toch client side?
En wat adviseer je dan?
En wat adviseer je dan?
Gewijzigd op 01/01/1970 01:00:00 door Timen kut
'Timen:
Hoe wil jij mijn cookies stelen? Cookies staan toch client side?
Er zijn zoveel mogelijkheden.
Zie Wikipedia.
'Timen:
En wat adviseer je dan?
Nou, euh, wat ik al de hele tijd adviseer?




