Inlogsysteempje begin

  • Beste leden,


    IK ben stap voor stap een veilig inlog systeem aan het schrijven. Per ding wat ik eraan verander vraag ik wat beter kan.


    Ik heb nu dit:


    Hopend dat u me hiermee wilt helpen.


    Met vriendelijke groet,


    Luc

  • PHP
    $mysqli->query("SELECT gebruikersnaam FROM leden WHERE gebruikersnam='".$gebruikersnaam."'");


    Kijk eens wat naar WHERE komt ;)

    Het bovenstaande bericht werd geplaatst door een lid waarvan het account verwijderd is.

  • Dan stuit je al op een probleem: Niets is veilig. :p


    Maar als je voor veiligheid kiest, waarom dan cookies en geen SESSIONS?

    Het bovenstaande bericht werd geplaatst door een lid waarvan het account verwijderd is.


  • Is alleen wel zo onveilig als wat aangezien je door middel van de cookie 'gebruikersnaam' te wijzigen toegang krijgt tot een ander account. Kijk eens naar sessies ;) Stukje veiliger op de manier zoals jij het wil doen.


    isset() kan trouwens meerdere waarden bevatten zegmaar dit:

    PHP
    isset($foo,$bar)
  • Wat Niels zegt inderdaad.


    Citaat

    Dan stuit je al op een probleem: Niets is veilig.


    Maar als je voor veiligheid kiest, waarom dan cookies en geen SESSIONS?


    Omdat sessies niet per definitie veiliger zijn? Bij goed gebruik van cookies kan dit heel veilig zijn.


    "Niets is veilig." Een volledig veilig systeem is bijna onmogelijk, maar een loginsysteem op zich: Moet lukken.


    [offtopic]Overigens waardeer ik dan wel heel erg dat je dit topic opent![/offtopic]

  • Ik heb ondertussen het script wat vergroot.



    Is dit al beter? En wat kan ik er verder nog aan toevoegen waardoor het veiliger word.


    Met vriendelijke groet,


    Luc

    Nieuwe reactie samengevoegd met originele reactie op 02.12.09 09:05:06:


    Zoiets zalegt wel veilig moeten zijn lijkt me. Maargoed hoe kan ik dit beter maken?


    Met vriendelijke groet,


    Luc

  • De errors er uit halen?
    isset($_SESSION['id'] &&
    je vergeet isset() af te sluiten... (niet alleen daar)


    PHP
    if(isset($_COOKIE['id']) && ctype_digit($_COOKIE['id']) && isset($_COOKIE['gebruikersnaam']))
    // kan korter als:
    if(isset($_COOKIE['id'], $_COOKIE['gebruikersnaam']) && ctype_digit($_COOKIE['id']))
    // zoals niels dus al zei...


    de else die false returned weg halen...
    en de "return FALSE;" net op het einde van de functie zetten... (niet in een if)


    De datum en gebruikersnaam niet uit de database selecteren...


    Zodra je ingelogd bent (je login script) session_regenerate_id() aanroepen...


    Zorgen dat je $mysqli ook echt bestaat...


    de $ voor mysql_real_escape_string($_COOKIE['gebruikersnaam']) weghalen...


    $_SERVER_REMOTE_ADDR veranderen in $_SERVER['REMOTE_ADDR']


    Op id selecteren, niet op gebruikersnaam...
    Ook vind ik het geen goed idee om de gebruikersnaam in de cookie en sessie op te slaan, het id is genoeg...
    Wil je nog een extra waarde neem dan de hash van iets... (ip + browser + id + datum geregistreerd bijvoorbeeld)


    $_session['id'] met hoofd letters schijven...
    consequent blijven is trouwens ook wel handig... ($_SESSION['id'] en $_SESSION['ID'] zijn verschillende variabelen)

  • Citaat van MrMees

    Darsstar: Wat maakt het verschil tussen op ID of op naam selecteren?


    Verder is het ook een beetje vreemd als je een uniek veld hebt voor een bepaalde user dat niet hoort te veranderen (gericht aan iedereen die het zou kunnen veranderen in de database) en een ander veld gebruikt om users te identificeren...
    Zeker wanneer je bedenkt waar id voor staat!


    Even logisch nadenken kan soms al veel opleveren :p

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!