[php] Login script probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 12-09 16:21
Beste, :)

Ik ben bezig met een website voor een school opdracht. ik heb op het moment bezig met een login script dat gebruik maakt van PHP en MySQL.

Mijn probleem is als volgt:

ik geef de gebruikersnaam en wachtwoord op, en dat pikt hij allemaal. maar wanneer ik weer naar de home directory word doorverwezen, dan heb ik niet ingelogd. mijn gevoel hierbij gaat naar het zetten van de sessie...

het is dus de bedoeling om wanneer je inlogt het gebruikers id uit de MySQL tabellen opgeslagen wordt in de sessie. Ik krijg geen error meldingen o.i.d. alleen niet niet gezette sessie...

ik heb het volgende geprobeert:

- vergelijking met ander login scripts ( ben ik niet uitgekomen)
- sessie aangepast (werkte, maar ik kon het user id niet opslaan in de sessie)
- mysql query's aangepast ( niet het gewenste resultaat)
- Vrienden gevraagd ( Wisten het ook niet )


Ik hoop dus met een paar extra ogen ( van jullie ) het probleem op te kunnen lossen.

Hier is het controle gedeelte van het login script:

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
32
33
34
35
            {
                // Check gegevens
                $sql = mysql_query ( "SELECT * FROM users WHERE login = ' ".$_POST['login']." ' AND password = ' ". md5 ($_POST['pass']) ." ' ");
                $row = mysql_fetch_assoc ( $sql );
                if ( $row  === 0 )
                {
                    $error = '<center><b><font color="red">De gebruikersnaam en wachtwoord zijn foutief ingevuld!</font></b></center><br /><br />';
                }
                else
                {
                    $fetch = mysql_fetch_assoc ( $sql );
                    
                    //Check2
                    if ( $fetch['active'] === 0 )
                    {
                        $error = '<center><b><font color="red">Uw account is niet actief!</font></b><br /><br /></center>';
                    
                    }elseif ( $fetch['level'] === 1 )
                    {
                        $error = '<center><b><font color="red"> Uw Account is helaas geblokkeerd!</font></b><br /><br />';
                    
                    }
                    else
                    {
                        mysql_query ( "UPDATE users SET lastlogin = NOW(), lastip = ' ".$_SERVER['REMOTE_ADDR']." ', lasthost = ' ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." ' WHERE id = '".$fetch['id']."' ")
                        or die ("Database error");
        
                        $_SESSION['on'] = $fetch['id'];
            
                        header ( "Location: ".$website );
                        exit;
                    }
                }       
            }
        }


Groetjes en alvast bedankt,

Helixon

Edit:----------------------------------------

Het Probleem is opgelost ;)

In de query had ik de tabelnaam password i.p.v. pass.
En in de in de query ik had spaties tussen de: '<spatie>"variabel"<spatie> ' staan.

Bedankt voor jullie hulp.

Dit topic kan op slot!

[ Voor 12% gewijzigd door Helixon op 01-04-2011 11:09 ]

Omdat het kan.....


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:03

Creepy

Tactical Espionage Splatterer

En je weet zeker dat de sessie wordt gezet? En hoe check je dat op de pagina waarnaar wordt geredirect?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 12-09 16:21
Ik laat de gebruikersnaam fetchen door het id uit de sessie te halen...:

PHP:
1
2
3
4
5
6
7
8
9
    $sql = "SELECT * FROM users WHERE id =  ";
    $result = mysql_query ( $sql );
    $userdata = mysql_fetch_assoc($result);

    if( isset($_SESSION['on']) && $_SESSION['on'] == $fetch['id'] )
    {
        echo 'Welkom terug op Zeriso.com '.$userdata['name'].' ';
        echo '<br />Uw laatste login was op: '.$userdata['lastlogin'].' ';
    }


hier een link naar het login script en een test gebruiker:

Link

Gebruikersnaam: test
Password: test

Omdat het kan.....


Acties:
  • 0 Henk 'm!

  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 12:40
Dit kan nooit werken want $fetch['id'] gaat waarschijnlijk nooit bestaan
probeer eens iets zoals:

PHP:
1
2
3
4
5
6
7
8
9
        if(isset($_SESSION['on']))
        {
        $userid = $_SESSION['on'];
        $sql = "SELECT * FROM users WHERE id = $userid ";
        $result = mysql_query ( $sql );
        $userdata = mysql_fetch_assoc($result);
            echo 'Welkom terug op Zeriso.com '.$userdata['name'].' ';
            echo '<br />Uw laatste login was op: '.$userdata['lastlogin'].' ';
        }

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
pachacuti schreef op donderdag 31 maart 2011 @ 23:52:
Dit kan nooit werken want $fetch['id'] gaat waarschijnlijk nooit bestaan
Dat denk ik ook.
Of nog beter: debuggen! Voor mijn part een var_dump(mysql_fetch_assoc($result)). Dat is ook precies waar Creepy naar hint. Debuggen: Hoe doe ik dat?

[ Voor 4% gewijzigd door RobIII op 31-03-2011 23:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 21:58
ben ik de enige die het opvalt dat er geen session_start() is...?

$_SERVER['REQUEST_METHOD'] vind ik trouwens ook maar raar.. vooral als je meerdere buttons kunt hebben (bv search & login submit) .. kun je het beste op if($_POST['SubmitLogin'] doen.. (waarbij submit knop als naam en id dus SubmitLogin heeft..)

[ Voor 60% gewijzigd door Icekiller2k6 op 31-03-2011 23:58 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 12:40
Icekiller2k6 schreef op donderdag 31 maart 2011 @ 23:57:
ben ik de enige die het opvalt dat er geen session_start() is...?
In php.ini is er een optie session.auto_start die je op 1 kan zetten waardoor dit niet meer nodig is. Default staat deze trouwens wel op 0

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 13-09 22:41

Ventieldopje

I'm not your pal, mate!

Sessions gaan zo niet werken inderdaad, session_start(); toevoegen boven elke pagina waar je sessies gebruikt. Daarnaast zal dit even snel in elkaar geflanst zijn om ons een idee te geven wat hij bedoelt en zit wel ok in elkaar.

Alleen dus even session_start() aanroepen bij elke pagina ;)
pachacuti schreef op vrijdag 01 april 2011 @ 00:03:
[...]
In php.ini is er een optie session.auto_start die je op 1 kan zetten waardoor dit niet meer nodig is. Default staat deze trouwens wel op 0
Alleen is dit niet altijd wenselijk ;)

[ Voor 36% gewijzigd door Ventieldopje op 01-04-2011 00:07 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 12-09 16:21
session_start() wordt geopend in de config die ik in de index geinclude heb...

Omdat het kan.....


Acties:
  • 0 Henk 'm!

  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
Ik zou toch ook eens iets gaan doen aan de veiligheid van je website. Wat ik op 't eerste zicht zie:

- Overal SQL-injecties mogelijk -> Maak op z'n minst gebruik van mysql_real_escape_string()
- Hetzelfde voor XSS-attacks - > Maak op z'n minst gebruik van htmlspecialchars()
- MD5 mag ook wel achterwege gelaten worden.-> Verander naar een SHA2-variant + salt.

En dan nog dingen die problemen kunnen/gaan geven:
- Gebruik van variabelen die mogelijk niet bestaan (trim($_POST['login']))
- Afhankelijkheid van PHP-instellngen (zoals hierboven al vermeld, session.auto_start)
- Geen foutafhandeling (blijkbaar tot je eigen frustratie)

En dan nog wat dingetjes die waarschijnlijk toch niet aangepast gaan worden, maar voor de volledigheid:
- Gebruik van opmaak in HTML -> Maak gebruik van CSS!
- HTML en PHP door elkaar gemengd
- Gebruik van de oude mysql_ library -> gebruik dan beter mysqli_

Misschien dat sommige puntjes wat overdreven zijn voor dit topic, maar ik zou toch zeker iets doen aan de veiligheid; op dit moment moet je echt geen expert zijn om binnen te geraken. :)

[ Voor 16% gewijzigd door Bv202 op 03-04-2011 15:35 ]


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
en nog een twee puntjes om het af te maken:

- $row en $fetch zijn hetzelfde?
- je html is niet well-formed bij de eerste twee meldingen

Acties:
  • 0 Henk 'm!

  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 12-09 16:21
Ik plaats morge wel een completere versie van het script...

Omdat het kan.....


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Helixon schreef op vrijdag 01 april 2011 @ 00:58:
Ik plaats morge wel een completere versie van het script...
Alsjeblieft niet. We zijn geen persoonlijke debug-service ;) We zien hier graag enkel en alleen relevante(!) stukjes code om een probleem te illustreren; geen complete lappen zodat wij even haarfijn de fouten gaan zitten aanwijzen. We verwachten op GoT wel wat meer eigen inzet en initiatief ;) Zie daarvoor ook onze Quickstart

[ Voor 10% gewijzigd door RobIII op 01-04-2011 01:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

kaesve schreef op vrijdag 01 april 2011 @ 00:57:
- $row en $fetch zijn hetzelfde?
Nee, niet dus. Júist niet, dat is nou net het probleem waar TS tegenaan loopt. ;)
Pagina: 1