[php] Leden systeem beveiliging

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,
Ik ben met een leden systeem bezig, maar het is van groot belang dat die goed beveiligd is. Ik werk nu met Sessies en de paswoorden zijn gecodeerd. Als iemand inlogt word er natuurlijk gecheckt of zijn gegevens kloppen en als dat zo is worden user id in een sessie gestopt en daarmee check ik of die ingelogt is.

Is dit veilig zo nee hoe kan ik het nog beter beveiligen?

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
is veilig ja, doe ik ook

password -> MD5 DB
sessie in cookie samen met userid
die checken, als die goed zijn ben je ingelogt
bij inloggen ingevulde password naar md5 omzetten en die vergelijken met die uit de DB.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

"ik heb een auto met een slot op de achterdeur en ik heb de enige sleutel, is dit veilig?"

Tsja, heb je de ramen wel dichtgedaan? Zit er een alarm op?

beetje vage vraag dus :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ligt natuurlijk hoe extreem je de beveiliging wilt ;)
zolang je goed programmeert en regel 1 in acht neemt (vertrouw niet op userinput) lijkt me dat je veilig genoeg bezig bent ;)

offtopic:
D2k: zie je wel, ik leer het :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm kwam net wat tegen over "Custom session-handler" is dat beter dan de normalen sessie manier?

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Weer zo'n klepel/klok vraag.

Wat voor antwoord verwacht je nou? "ja"? "nee"?

Als je verder geen verstand hebt van sessies zou het idd nog best zo lek kunnen zijn als een zeef, terwijl je toch de juiste technieken gebruikt.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Owke bedankt voor je vriendelijke antwoord.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Verwijderd schreef op 26 januari 2003 @ 15:51:
Owke bedankt voor je vriendelijke antwoord.

Geen probleem. Een goede, uitgebreide en doordachte vraag kan altijd rekenen op een goed antwoord.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
vertrouw niet op userinput
Dat is idd het belangrijkste, alleen wat is vertrouwen? Bedoel je gegevens niet zomaar in je query plaatsen of doel je ergens anders op?

De vraag is idd niet echt goed gesteld, misschien moet je eens laten zien wat je al hebt, dan kan daar commentaar op geleverd worden, wat zeker zal gebeuren :))

Acties:
  • 0 Henk 'm!

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
djluc schreef op 26 January 2003 @ 15:54:
[...]
Dat is idd het belangrijkste, alleen wat is vertrouwen? Bedoel je gegevens niet zomaar in je query plaatsen of doel je ergens anders op?

De vraag is idd niet echt goed gesteld, misschien moet je eens laten zien wat je al hebt, dan kan daar commentaar op geleverd worden, wat zeker zal gebeuren :))
alles eerst checken op alle mogelijkheden (0.3 komt nog steeds door een isnumeric heen bijvoorbeeld) voordat je die gegevens gaat verwerken en toepassen in je script.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

djluc schreef op 26 januari 2003 @ 15:54:
[...]
Dat is idd het belangrijkste, alleen wat is vertrouwen? Bedoel je gegevens niet zomaar in je query plaatsen of doel je ergens anders op?
onder andere, zo moet je niet iets rechtsteeks in je query stoppen, en ook die cookies moet je niet vertrouwen ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?
if($login) {
    $user = trim($user);
    $password = trim($password);

    if($user == "") {
        $error_user = "- Fill in your user number.<br>";
        $ok = "nee";
    }
    
        $query = mysql_query("SELECT user, password FROM members WHERE user='$user'");
        while ($list = mysql_fetch_object($query)) {
    
        $md5 = md5($password);  
                    
    if($md5 != "$list->password" OR $password == "") {
        $error_password = "- Wrong password.<br>";
        $ok = "nee";
    }                   
    }
    if($ok != "nee") {
        $query = mysql_query("SELECT id FROM members WHERE user='$user'");
        while ($list = mysql_fetch_object($query)) {
        $_SESSION['id']= $list->id; 
        $time = time();
        $update = mysql_query("UPDATE members SET last='$time' WHERE id=$list->id");    
        echo "<script language=\"javascript\">window.location=\"index.php\"</script>";
      }
    }

?>

Dit heb ik nu voor het check gedeelte.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 26 januari 2003 @ 16:11:
PHP:
1
2
3
4
        $query = mysql_query("SELECT user, password FROM members WHERE user='$user'");
        while ($list = mysql_fetch_object($query)) {
    
        $md5 = md5($password);

Dit heb ik nu voor het check gedeelte.
waar komen $user, $password en $login enzo vandaan, daarnaast kan een addslashes geen kwaad ;)

tevens vind ik het raar dat je het password aan mysql vraagt, waarom niet een select count from table where user=user and pass=md5(pass) ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op 26 January 2003 @ 16:14:
[...]

waar komen $user, $password en $login enzo vandaan
Die komen vanuit een formulier als de persoon op de login knop drukt die genaamd $login is dat start ie dat gedeelte.
tevens vind ik het raar dat je het password aan mysql vraagt, waarom niet een select count from table where user=user and pass=md5(pass) ?
Hmm goed idee ja. Had ik niet aan gedacht.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Die komen vanuit een formulier als de persoon op de login knop drukt die genaamd $login is dat start ie dat gedeelte.
Ik durf het haast niet te vragen, maar hoe staan je registery globals?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
register_globals On On

Acties:
  • 0 Henk 'm!

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
:X :X :X

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jah eh daar heb ik niet veel een kan je me vertellen wat ik fout doe?

Acties:
  • 0 Henk 'm!

Verwijderd

<offtopic>
gebruik binnenkort ook de nieuwe session_readonly() functie van PHP (nu alleen nog in CVS versie)
ideaal voor dit soort dingen.
http://nl.php.net/manual/nl/function.session-readonly.php
</offtopic>

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?
if($login) { // waar komt $login vandaan?
    $user = trim($user);
    $password = trim($password);

    if($user == "") {
        $error_user = "- Fill in your user number.<br>";
        $ok = "nee";
    }
    
        $query = mysql_query("SELECT user, password FROM members WHERE user='$user'"); // $user door addslashes halen
        while ($list = mysql_fetch_object($query)) {
    
        $md5 = md5($password);  // while? als het goed is krijg je maar 1 record terug?
                    
    if($md5 != "$list->password" OR $password == "") { //$md5 != $list->password, geen "" gebruiken
        $error_password = "- Wrong password.<br>";
        $ok = "nee";
    }                   
    }
    if($ok != "nee") { // wat als iemand de pagina met $ok=ja aanroept? waarom dit als een aparte if?
        $query = mysql_query("SELECT id FROM members WHERE user='$user'");
        while ($list = mysql_fetch_object($query)) { // while?
        $_SESSION['id']= $list->id; 
        $time = time();
        $update = mysql_query("UPDATE members SET last='$time' WHERE id=$list->id");     // {$list->id}
        echo "<script language=\"javascript\">window.location=\"index.php\"</script>"; zet de hele zut tussen ' en verwijder de \
      }
    }

?>

kleine fixjes en ideeën, zal nog wel meer inzitten.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmz owke.
Dit is niet het hele script hoor trouwens ik heb het formulier gedeelte weg gelaten en als iemand met $ok=ja aanvraagd dan is het toch alsnog anders dan nee dan gaat ie gewoon naar de else { die eronder nog hoord verder in het script.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Verwijderd schreef op 26 januari 2003 @ 19:56:
Hmmz owke.
Dit is niet het hele script hoor trouwens ik heb het formulier gedeelte weg gelaten en als iemand met $ok=ja aanvraagd dan is het toch alsnog anders dan nee dan gaat ie gewoon naar de else { die eronder nog hoord verder in het script.

Nee, dat komt hij niet. Als ik een bogus $user meegeef, zal hij de 1e check overslaan (als zijnde goed). De while-loop komt-ie logischerwijs niet in en $ok zal dus nooit 'nee' worden.

Klaar voor een nieuwe uitdaging.

Pagina: 1