php inlog middels sessie cookie en isset niet veilig ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb met php verschillende sites gemaakt die gebruik maken van een inlogsysteem. Wat ik altijd doe is bij een goede inlog een sessie cookie ($geheim = "toegang") plaatsen, waarna ik bovenaan pagina's waarvoor een inlog vereist is op deze manier kijk of de cookie is gezet:

if(isset($geheim)) {}

Ik kwam er echter laatst achter dat je de pagina ook kan bereiken met:

pagina.php?geheim="bla"

Is dit nu eigenlijk veilig genoeg ? Ik heb er mijn twijfels bij, als mensen kunnen achterhalen wat de naam is van de sessie cookie kunnen ze zo binnen komen en een hoop kwaad doen in een content management tool bijvoorbeeld.

Je zou dit nog kunnen doen:

if(isset($geheim) && $geheim == "toegang") {}

Maar ik ben er niet weg van, volgens mij is er een veiliger manier om een inlog op te zetten. Kan iemand mij helpen ?

groeten

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Je moet dan zoiets gebruiken:
PHP:
1
2
3
4
5
if ($_COOKIE['geheim'] == 'toegang') {
  // Toegang blaat
} else {
  // Geen toegang blaat
}

beetje manual werk...
http://nl2.php.net/manual/nl/features.cookies.php

[ Voor 17% gewijzigd door Slagroom op 15-07-2003 11:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

superglobals is een oplossing
PHP:
1
if($_COOKIE['geheim'] == "toegang")


offtopic:
te laat...

[ Voor 38% gewijzigd door Verwijderd op 15-07-2003 12:00 . Reden: session ipv cookie ]


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
met php sessions gaan werken :

http://nl2.php.net/manual/en/ref.session.php


of zelf een vergelijkbaar systeem maken:

bijvoorbeeld:

we hebben een mysql tabel met users + passwoorden.
we stoppen een kolom erbij en die noemen we UID.

een user logt in
1. gebruikersnaam + wachtwoord verificatie
2. combinatie OK?
3. genereer random unieke sleutel (skjfhsdkfsdkf897689678sdJKdfgg etc :P )
4. stop unieke sleutel in de kolom UID van usertabel
5. stop unieke sleutel in een cookie.


op elke pagina een check doen voor het volgende:

1. bestaat uid cookie?
2. bestaat er een user in de database met de sleutel uit het cookie?
zoja, gebruiker is ingelogd en OK
zonee, wegwezen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor de snelle reactie ik zal het proberen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben er lang mee bezig geweest, heb ook in de manual gekeken maar ik kom er niet uit, het onderstaande werkt niet.

Ik gebruik nu:

Header("P3P: CP=\"ALL\"");
setcookie("inlogkoekje6703aa", "cookievulling66398673ghjkl");

en dan:

if($_COOKIE['inlogkoekje6703aa'] == 'cookievulling66398673ghjkl') {}

Ik vind de oplossing van Twiekert ook wel ok en die ga ik gebruiken in de toekomst. Laat het echter nu zo zijn dat ik nu geen database tot mijn beschikking heb en de password <> username combinatie uit een lijst haal.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Wel een CMS systeem maken, maar niet weten wat super-globals zijn? :S

De manier waarop jij werkt is idd niet veilig.

Werk liever met sessies...

// Wanneer een goed wachtwoord is ingevoerd;
PHP:
1
2
3
4
<?
session_start();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
?>


Vervolgens kan je in al je beveiligde paginas controleren of men is ingelogd met;
PHP:
1
2
3
4
5
<?
session_start();
if(!isset($_SESSION['ip']) || $_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  exit("Niet ingelogd.");
?>


Dit is ook nog niet DE methode, maar iig een stuk beter.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

frickY schreef op 16 July 2003 @ 14:20:

<SNIP>

Vervolgens kan je in al je beveiligde paginas controleren of men is ingelogd met;
PHP:
1
2
3
4
5
<?
session_start();
if(!isset($_SESSION['ip']) || $_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  exit("Niet ingelogd.");
?>


Dit is ook nog niet DE methode, maar iig een stuk beter.
Dus als mensen gebruik maken van een proxy dan is iedereen die gebruik maakt van die proxy ook gelijk in gelogd?

Handig :)

[ Voor 34% gewijzigd door LuCarD op 16-07-2003 14:27 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Neman
  • Registratie: September 2000
  • Laatst online: 18-09 08:58

Neman

Een uit de lucht gegrepen naam

LuCarD schreef op 16 July 2003 @ 14:27:
[...]


Dus als mensen gebruik maken van een proxy dan is iedereen die gebruik maakt van die proxy ook gelijk in gelogd?

Handig :)
Inderdaad, wat een waardeloze methode :D (NOFI).

Acties:
  • 0 Henk 'm!

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:07

Snow_King

Konijn is stoer!

Ik heb het zelf anders gedaan
PHP:
1
2
3
4
5
6
7
8
$cookie_usr = $HTTP_COOKIE_VARS["aog_name"]; 
$cookie_session = $HTTP_COOKIE_VARS["aog_session"]; 

$select_session = mysql_query("SELECT id FROM site_sessions WHERE usr_name='$cookie_usr' AND session_id='$cookie_session'");
$currentstatus = mysql_num_rows($select_session);
if($currentstatus > 1){
    $currentstatus = "0";
}

Hij check samen met MySQL of er een rij met die session bestaat en een userID daar bij, die session is gewoon een lang random gegenereert.
Als currentstatus 1 is ben je ingelogt, 0 of iets anders niet.
Als ie groter dan 1 is, dan zijn er meerdere rijen in de MySQL db met de zelfde info en dat hoort niet :P

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Wat een hoop gedoe.. aangezien de data van een sessie toch alleen serverside opgeslagen wordt, waarom niet gewoon de username opslaan in de sessie?

Is er geen username in de sessie, dan is men niet ingelogd... zo ja, dan is dat ook direct de ingelogde gebruiker... sim-pel.. en prima veilig als de rest van je applicatie (in-/uitloggen) dit ook is.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Ik vergelijk eerst de username/password met de info in de database. Als die klopt maak ik een UID aan, in de database met wat info erin, de UID word opgeslagen in een session, en ik had ook nog cookies, maar geen idee waarom.... :P Ojah, voor de altijd ingelogde gebruikers :) Overigens, als je de browser hebt afgesloten en je komt weer op de pagina word weer een nieuwe UID aangemaakt.

Door met een UID te werken, kan ik praktisch alle info van een ingelogde gebruiker uit die rij halen, wat weer veel scheelt. Ach, en query meerof minder maakt ook niet uit als je een forum bouwt :P

[ Voor 21% gewijzigd door Roa op 16-07-2003 15:01 ]

Research is what I'm doing when I don't know what I'm doing.

Pagina: 1