[php] feilloos uitloggen

Pagina: 1
Acties:

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Na veel vragen en zoeken kom ik maar niet eruit:

Ik wil graag een php inlog systeem creëeren waarbij de eigenlijke beveiligde pagina's na uitloggen niet door een simpele back button TOCH getoond worden (door cache oid).

Ik heb voor de inlogpagina de volgende code (user en pass komen uit database zoals je ziet):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql_connect("localhost", "xxx", "xxx"); 
@mysql_select_db("login"); 

$Query = mysql_query("SELECT * FROM users WHERE username = '$LoginNaam' 
AND password = '$LoginPassword'"); 
$Results = mysql_num_rows($Query); 

if ($Results == '1') { 

            $MySession->Login = 1; 
            $MySession->Username = $LoginNaam; 
            $MySession->Password = $LoginPassword; 
            session_register("MySession");

Vervolgens gebruik ik op de beveiligde pagina's het volgende om te controleren of is ingelogd:
PHP:
1
if ($MySession->Login == 1) {

(allebei voorafgaand door een session_start();)

Om uit te loggen gebruik ik:
PHP:
1
2
3
session_start(); 
session_destroy();
header("Location: http://xxx");

Maar na een druk op de back button kan nog steeds de inhoud worden gelezen. Ik heb ook al iets gevonden over headers, maar ik krijg het iig niet werkend.

Er zijn talloze script en tutorials over inlogsystemen, maar overal is er wel een beveiligingslek. Nu snap ik ook wel dat het altijd wel te "kraken" valt, maar het kan toch op zn minst zo goed mogelijk in elkaar worden gezet. Misschien een idee om een compleet inlog systeem (inlog,beveiligde pagina, uitlog) te plaatsen ergens?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

De code die je hebt geplaatst heeft weinig van doen met je probleem. Je probleem ligt juist bij die headers. Laat daar eens wat code van zien?

Daarnaast denk ik dat dit nog behoorlijk lastig gaat worden. De pagina waar je namelijk naar toe gaat waneer je op de back knop drukt wordt gewoon uit de chache geladen, en niet opnieuw aangevraagd. Behalve met wat headers heb je hier verder geen enkele invloed op.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Ik weet niet goed welke headers ik daarvoor moet gebruiken, maar het zal iets in de aard van
code:
1
<meta http-equiv="Pragma" content="no-cache;">
zijn.

kijk, het gaat om het volgende (ik heb dit probleem bij meerdere doelen, maar vooral het volgende is lastig.

Ik ben bezig met een php site, waarop gebruikers van onze server online tekst kunnen veranderen op hun site. Maar stel dat zij inloggen in bv een bieb. Een volgende gebruiker kan (mits IE niet is gesloten) heel gemakkelijk de inhoud dan lezen. Dat mag natuurlijk niet.

Buiten het feit dat ik naar de headers moet gaan kijken, is de php code voor "mijn" inlogsysteem veilig genoeg?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ze kunnen op z'n hoogst de pagina's bekijken vanuit de chache. Als de mensen zijn uitgelogd kunnen ze als het goed is geen veranderingen meer doorvoeren aangezien hiervoor het opvragen van een nieuwe pagina nodig is. Ik neem aan dat je bij die admin pagina's telkens controleerd of ze nog ingelogd zijn?

Daarnaast zou je ook eens bij headers in de php manual kunnen kijken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

PHP:
1
Header("Cache-Control: no-cache, must-revalidate ");


Deze header moet voldoen...

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
erm...tis vaag maar als ik NU
PHP:
1
header('Cache-Control: public');
toevoeg, werkt het opeens wel :?
maar goed, zijn jullie het ermee eens dat deze manier van inloggen veilig genoeg is om voor ons bedrijf met vele klanten dit online te laten geschieden?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

"prive" pagina's moet je sowieso niet via Cache-Control: public laten afhandelen, dan mogen proxy-servers de caches opslaan en doorsturen naar andere gebruikers als die toevallig hetzelfde opvragen...

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
ACM schreef op 22 september 2002 @ 18:13:
"prive" pagina's moet je sowieso niet via Cache-Control: public laten afhandelen, dan mogen proxy-servers de caches opslaan en doorsturen naar andere gebruikers als die toevallig hetzelfde opvragen...
dus wat stel jij voor?

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 17:27
Je kunt aan je session ook nog een levensduur hangen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


cache-control op private zetten wellicht? ;)

Liefst natuurlijk geen cacheing toestaan (wat je al deed geloof ik) en je zou van het uitloggen een post-pagina kunnen maken zodat je browser ook niet echt toelaat dat er op back gedrukt wordt.

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
bij een vriend van me en bij mij thuis werkt het goed met mijn oplossing. Echter wanneer ik op school inlog en uitlog, en dan back klik, staat de inhoud er nog.

vaag :?

Als ik het via een ander venster laat uitloggen, kan ik toch niet het huidige venster zomaar sluiten, dan vraagt ie om ja/nee (als ik me niet vergis)

Iemand maybe andere oplossing?

Verwijderd

Werkt session_unregister() ook niet?

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Verwijderd schreef op 24 september 2002 @ 17:09:
Werkt session_unregister() ook niet?
heeft toch niets met cache te maken??

Verwijderd

Verwijderd schreef op 22 september 2002 @ 17:52:
PHP:
1
Header("Cache-Control: no-cache, must-revalidate ");


Deze header moet voldoen...
blaten we weer eens verder terwijl het antwoord al gegeven is :z

en dat ie het dan op school niet doet is logisch, omdat je (neem ik aan) achter een proxy zit en dus worden de pages gecached als je de header op public zet

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
hmmz ok, morgen es proberen

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Ik zou er persoonlijk ook een expire date in de headers bij zetten, ergens in de vorige eeuw ofzo :+

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • AcXeller
  • Registratie: Mei 2002
  • Niet online
Komt rechtstreeks uit de php-manual:

PHP:
1
2
3
4
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");               // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  // always modified
header("Cache-Control: no-cache, must-revalidate");             // HTTP/1.1
header("Pragma: no-cache");                                     // HTTP/1.0


Altijd een zeer nuttig stukje. Leeg dan ook even je cache van je browser want anders zal die af en toe nog oud materiaal gaan gebruiken. Zijn van die leuke momenten dat je maar niet begrijpt waarom die en die functie niet werkt |:(

Mijn YouTube kanaal


  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 05-08 21:32

ReLight

echo("What Now ? !")

Dit is inderdaad lastig, heb ik opgelost door bij afloggen een java script te runnen die verzoekt het scherm te sluiten, met de uitleg erbij dat het ivm security is.
sessie weg & klaar.

Maar die php manual header code is ook Sweet. :9

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE

Pagina: 1