/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
log out sletter ikke cache
Fra : Erik Ginnerskov


Dato : 29-04-05 16:10

http://hjemmesideskolen.dk/scripts/phpmysql/default.php har jeg et login,
der - troede jeg indtil i går - spærrer for at kunne 'bakke ind' til besøgte
sider efter logout.

Nu viser det sig desværre, at hvis man ser siderne med Opera og
tilsyneladende også visse versioner af IE 6, kan man fra cachen hente de
besøgte sider igen efter logout.

Kan man ikke på nogen måde forhindre dette? Jeg havde forestillet mig noget
i retning af at sætte en expiration på siderne med en gammel dato på. Men
jeg kan ikke i min php-bibel finde noget om det.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/



 
 
Michael Rasmussen (29-04-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 29-04-05 16:15

On Fri, 29 Apr 2005 17:09:55 +0200, Erik Ginnerskov wrote:

>
> Kan man ikke på nogen måde forhindre dette? Jeg havde forestillet mig
> noget i retning af at sætte en expiration på siderne med en gammel dato
> på. Men jeg kan ikke i min php-bibel finde noget om det.
Se mit svar til nederbassen i forrige tråd.

Det sikreste er dog stadigvæk, hvis du generere en token og medsender som
hidden textfelt i formen, og efterfølgende sammenligner både token og en
sat værdi i session.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Erik Ginnerskov (29-04-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 29-04-05 22:50

Michael Rasmussen wrote:
> On Fri, 29 Apr 2005 17:09:55 +0200, Erik Ginnerskov wrote:
>
>>
>> Kan man ikke på nogen måde forhindre dette? Jeg havde forestillet mig
>> noget i retning af at sætte en expiration på siderne med en gammel
>> dato på. Men jeg kan ikke i min php-bibel finde noget om det.

> Se mit svar til nederbassen i forrige tråd.

Jeg prøvede at indsætte dette i head på den første beskyttede side:

<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="mon, 22 jul 2002 11:12:01 gmt">
<meta http-equiv="pragma" content="no-cache">

Det ændrede intet:

http://hjemmesideskolen.dk/scripts/test/default.php

> Det sikreste er dog stadigvæk, hvis du generere en token og medsender
> som hidden textfelt i formen, og efterfølgende sammenligner både
> token og en sat værdi i session.

Den må du lige skære ud i pap. :)

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/



Michael Rasmussen (30-04-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 30-04-05 09:50

On Fri, 29 Apr 2005 23:50:21 +0200, Erik Ginnerskov wrote:

>
> Den må du lige skære ud i pap. :)
Når en bruger er valideret, generere du en token.
F.kes. md5(uniqid(rand(), true)). Denne token gemmes i en cookie på
klienten og i sessionen på serveren. Så længe cookie-token og
server-token er identiske, har vi en valid session. Når brugeren logger
ud, slettes token i session og klientens cookie slettes. Herefter vil
postback ikke længere være mulig, da klienten ikke vil være i stand til
at medsende en gyldig token.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Erik Ginnerskov (30-04-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 30-04-05 23:16

Michael Rasmussen wrote:

> Når en bruger er valideret, generere du en token.
> F.kes. md5(uniqid(rand(), true)).

Det prøvede jeg at sætte ind i det script, der tjekker adgangsrettigheder:

<?
[klip login til databasen]
$result = mysql_query("SELECT NULL FROM users WHERE brugernavn =
'".$_POST['brugernavn']."' AND password = '".$_POST['password']."'") or die
(mysql_error());
if ($antal_raekker=mysql_num_rows($result)>0){
$_SESSION['logget_ind']=1;
$_SESSION['brugernavn'] = $brugernavn;
$_SESSION['password'] = $password;
md5(uniqid(rand(), true));
}
else
{
echo <p>Fejl</p>";
}
?>

Men Opera kan stadig 'bakke ind' til besøgte sider efter logout.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/



Michael Rasmussen (01-05-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 01-05-05 02:30

On Sun, 01 May 2005 00:16:08 +0200, Erik Ginnerskov wrote:

> md5(uniqid(rand(), true));
Dette skal skrives til en cookie, og sider der skal beskyttes, skal læse
og sammenligne token fra cookie med token fra session
>
> Men Opera kan stadig 'bakke ind' til besøgte sider efter logout.
Du kan eventuelt prøve dette:
<meta http-equiv="Cache-Control" content="private">; Gælder kun for
HTTP/1.1.

Bemærk hvad jeg har skrevet før, at du ikke kan være sikker på,
brugerens browser overholder det, da brugeren/browseren helt selv kan
bestemme dens virkemåde uden indblanding fra andre.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Bent Stigsen (01-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 01-05-05 03:31

Michael Rasmussen wrote:
> On Sun, 01 May 2005 00:16:08 +0200, Erik Ginnerskov wrote:
>
>
>> md5(uniqid(rand(), true));
>
> Dette skal skrives til en cookie, og sider der skal beskyttes, skal læse
> og sammenligne token fra cookie med token fra session
>
>>Men Opera kan stadig 'bakke ind' til besøgte sider efter logout.
>
> Du kan eventuelt prøve dette:
> <meta http-equiv="Cache-Control" content="private">; Gælder kun for
> HTTP/1.1.
>
> Bemærk hvad jeg har skrevet før, at du ikke kan være sikker på,
> brugerens browser overholder det, da brugeren/browseren helt selv kan
> bestemme dens virkemåde uden indblanding fra andre.

Det er beskrevet i rfc'en
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.13

Det er slet ikke meningen at de skal overholde det (cache-control) i
forbindelse med historik, fordi historik og caching anses for to
forskellige ting.

Opera gør det rigtige efter hvad der står i rfc'en.

/Bent



Erik Ginnerskov (01-05-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 01-05-05 15:36

Michael Rasmussen wrote:

>> md5(uniqid(rand(), true));

> Dette skal skrives til en cookie, og sider der skal beskyttes, skal
> læse og sammenligne token fra cookie med token fra session

Det har jeg forsøgt, men det resulterer bare i, at jeg slet ikke kan logge
ind. Jeg kan sikkert hverken sætte cookien med den nødvendige info eller
siden aflæse cookien.

>> Men Opera kan stadig 'bakke ind' til besøgte sider efter logout.
> Du kan eventuelt prøve dette:
> <meta http-equiv="Cache-Control" content="private">; Gælder kun for
> HTTP/1.1.

Det er Opera også totalt bedøvende ligeglad med. Jeg kan stadig gense
besøgte sider efter logout.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste