[PHP LOGIN] Veilige manier.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full stack developer Node.js, React Remote

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Java Developer

Dit ga je doen Als Java Developer ben je verantwoordelijk voor: Het ontwikkelen van nieuwe en bestaande webservices; Het uitbreiden van functionaliteiten binnen de producten- en dienstenportefeuille; Het werken aan gegevensuitwisseling met bijvoorbeeld SOAP; Testen van frameworks met gebruik van UNIT en Selenium. Hier ga je werken De organisatie waar je komt te werken is een semi-overheidsinstelling, gesitueerd in Utrecht en zorgt voor een goede samenwerking tussen verschillende overheidsinstanties. Het is een familiaire club die gaat voor kwaliteit en langdurige relaties. Zo zorgen zij ervoor dat er op grote schaal vertrouwelijke informatie tussen verschillende overheidsinstellingen wordt uitgewisseld. Hun werk zorgt

Bekijk vacature »

SQL database developer

Functie omschrijving Voor een softwarebedrijf gespecialiseerd in het ontwikkelen van logistieke software in omgeving Tilburg zijn wij op zoek naar een ervaren SQL database developer. Je gaat werken aan uitdagende, complexe projecten. Iedere klant/project betekent maatwerk in de database. Jouw werkzaamheden zullen er als volgt uit zien: Je bent verantwoordelijk voor de gehele ontwikkelstraat. Van architectuur tot ontwikkeling Je gaat je bezig houden met het ontwerpen en ontwikkelen van MS SQL server databases. Je gebruikt hiervoor T-SQL als programmeer laag. Je begeleidt als lead developer de projecten bij klanten van A – Z. Je sluit aan bij meetings met klanten,

Bekijk vacature »

Digital Agency is looking for PHP developers!

Functie The team currently has 20 colleagues, consisting of developers (front and backend) and the operations team, which also includes management and two scrum masters. They are looking for a PHP developer who is able to work independently. You will work in one of the three scrum teams and start working on a project for the customer. The interesting thing about this is that you do have variety in terms of work, but at the same time continuously work for existing customers. This also gives you the opportunity to really go into depth and develop innovative technical solutions. In terms

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

Low-Code Expert/Developer: Power Platform Speciali

Bedrijfsomschrijving Als Low-Code Expert/Developer bij ons innovatieve bedrijf, neem je een cruciale rol op je in de creatie, ondersteuning en implementatie van diverse oplossingen met behulp van het veelzijdige Power Platform. Dit platform omvat Power Apps, Power BI, Power Automate, Power Virtual Agent en Azure Logic Apps. Het Power Platform biedt je de mogelijkheid om klanten te voorzien van naadloze integraties door op maat gemaakte oplossingen te creëren die compatibel zijn met (bijna) alle bestaande software-infrastructuren. Dankzij het uitgebreide scala aan toepassingen, krijg je de kans om als architect en projectleider van je eigen oplossing te fungeren. Dompel jezelf onder

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Lasrobot Programmeur

Over de functie Off-line programma’s maken die het beste resultaat bij de lasrobot mogelijk maken De programma’s met behulp van teach verder optimaliseren Proactief meedenken over oplossingen en over de juiste invulling van lasmallen Het lasrobotproces zoveel mogelijk optimaliseren Over het bedrijf Onze opdrachtgever is gespecialiseerd in de engineering, productie en assemblage van samengestelde plaatwerkproducten en monodelen uit metaal. Onze klant werkt samen met het team aan de mooiste producten van de toekomst. Binnen dit bedrijf staat een sterk team van specialisten op het gebied van industrial design, mechanical engineering, in-house prototyping en all-round projectmanagement. Met daarbij uiteenlopende kennis in

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

Software Developer

Functie omschrijving Psst hé jij daar! Op zoek naar een nieuwe uitdaging als developer? Wacht niet langer en reageer direct. In deze functie ga je bij een familiebedrijf werken als developer. Je gaat maatwerk software ontwikkelen met de Microsoft stack. Je gebruikt technieken als C#, ASP.NET en MVC. Je werkt in een leuk team van andere developers. Je krijgt veel vrijheid in je werk en kan flexibel werken. Dagje thuiswerken? Geen probleem! Daarnaast is er veel ruimte om écht mee te denken met het bedrijf en met de klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Vanaf

Bekijk vacature »

.net developer

Hoi! Wij zijn auto.nl en wij verkopen auto's online. je bestelt bij ons een auto net zo makkelijk als een spijkerbroek. En bevalt ie niet? Dan stuur je 'm gewoon weer terug. En dat we dat goed doen bewijst onze hoge klanttevredenheid van een 9,3. Nu maken we de volgende stap bij auto.nl. We starten met fysieke winkels. Online zoeken, offline bekijken. Maar nog altijd, geen gedoe! Gewoon eerlijk, transparant en zonder zorgen een auto kopen.. Maar om dat waar te blijven maken en nóg beter te worden, zoeken we uitbreiding van ons development team. Wat ga je precies doen?

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Medior/senior Front-end developer (Vue.js)

Functie Als Front-end developer ben je uiteindelijk overkoepelend aan de slag voor de 3 ontwikkelteams die ieder aan een specifiek product werken. In samenwerking met de UX-designer en de huidige Front-end developer zorg je voor gebruiksvriendelijke software. Lijkt het jou interessant om complexe problemen op te lossen en feautures naar een hoger niveau te tillen? En vind je het niet erg om oudere delen van de applicaties te refactoren i.c.m. het toevoegen van nieuwe functionaliteiten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en zelfredzaamheid)

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Wij zijn op zoek naar een PHP Developer! Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed

Bekijk vacature »
Paco oste

Paco oste

30/08/2010 18:27:11
Quote Anchor link
Hallo, ik was gisteren op deze website om mijn login systeem goed te maken.
Maar die dag was ik nogal, Pissig....
En ik heb tegen een paar mensen uitgevlogen, hiervoor wil ik me alvast voor verontschuldigen.
Maar nu hebben ze gezegd, dat mijn login systeem, heel slecht was.
Nu vraag ik mij af, wat is de goede manier hier voor?
Kan iemand mij een Code tonen van een goede login & Er informatie bij geven.
Waarom dit precies veiliger is?
Alvast bedankt, groetjes paco.
 
PHP hulp

PHP hulp

29/04/2024 12:47:45
 
Niels K

Niels K

30/08/2010 18:52:25
Quote Anchor link
Hoi Paco,

Quote:
Maar die dag was ik nogal, Pissig....

Dat is iedereen wel eens.

Quote:
Maar nu hebben ze gezegd, dat mijn login systeem, heel slecht was.

Ik ben je gisteren niet tegen gekomen, dus mijn vraag is: Kan je de specifieke code plaatsen?

Gr

:EDIT

Ik lees je topic / code van gisteren en geef iedereen gelijk.... Ik zal even een heel basic login script voor je schrijven met de benodigde commentaar en bij. Je zult nog wel zelf een aantal dingen moeten lezen, en bepaalde functies van PHP moeten implementeren.

Maar eerst even een kopje koffie. Totzo
Gewijzigd op 30/08/2010 18:58:07 door Niels K
 
Milo S

Milo S

30/08/2010 19:13:40
Quote Anchor link
Heey Paco,

Ik heb toevallig net wat geschreven voor een eigen site misschien kun je er wat mee, heb even wat comments voor je toegevoegd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
/*
Gebruikers
- id
- gebruikersnaam
- wachtwoord
(Kan je zelf verder uitbreiden, dit is nodig)
*/

# Sessie starten

session_start

# Pagina includen
include('config.php');

# Als er op submit is gedrukt.
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{

    # Als er gebruikersnaam & Wachtwoord is ingevult
    if( isset( $_POST['gebruikersnaam'] ) && isset( $_POST['wachtwoord'] ) )
    {

        # Gebruiker uit de database halen (Query nummer 1)
        $qry = "SELECT
                    id,
                    gebruikersnaam,
                    wachtwoord
                FROM
                    gebruikers
                WHERE
                    gebruikersnaam = '"
.mysql_real_escape_string( $_POST['gebruikersnaam'] )."'
                AND
                    wachtwoord = '"
.mysql_real_escape_string( md5( $_POST['wachtwoord'] ) )."'";
                    
        # Als query gelukt is
        if( $sql = mysql_query( $qry ) )
        {

            # Als er resultaten zijn
            if( mysql_num_rows($sql) > 0 )
            {

                # Record variabel aanmaken voor sessie.
                $rec = mysql_fetch_assoc( $sql );
                
                # Sessie's zetten
                $_SESSION['userid'] = $rec['id'];
                
                # Zeggen dat inloggen is gelukt
                echo 'U bent succesvol ingelogt.';
                
                # Doorsturen naar zelfgekozen pagina
                header('refresh: 2; URL=ZETHIERJOUWPAGINA.php');
            }

            else
            {
                # Geen resultaten error
                echo 'Er zijn geen gebruikers gevonden met deze gebruikersnaam / wachtwoord combinatie.';
            }
            
        }

        else
        {
            # Fout in de query
            echo 'Er is een fout opgetreden in de query [1].';
        }
    }

    else
    {
        # Geen gebruikersnaam of wachtwoord error.
        echo 'U heeft geen gebruikersnaam of wachtwoord ingevult.';
    }
}

else
{
    # Formulier weergeven.
    echo '
    <form action="" method="post">
        <label>Gebruikersnaam:</label>
        <input name="gebruikersnaam" type="text" />
        
        <label>Wachtwoord</label>
        <input name="wachtwoord" type="password" />
        
        <input type="submit" value="Log in" />
    </form>'
;
}

?>


Als niels nog wat advies heeft, gewoon opvolgen hij heeft volgens mij wat meer ervaring dan ik heb ;).
Gewijzigd op 30/08/2010 19:17:33 door Milo S
 
Noppes Homeland

Noppes Homeland

30/08/2010 19:16:24
Quote Anchor link
Ziet er toch aardig uit zo, mis alleen bij de isset van de $_POST nog wat controles/validaties
 
Milo S

Milo S

30/08/2010 19:21:18
Quote Anchor link
Gebruikersnaam & Wachtwoord zou je inderdaad verder kunnen controleren, maar ik dacht dat hij zo juist wel oke was i.v.m de mysql_real_escape_string().

Je zou ze natuurlijk ook per $_POST kunnen checken om je foutmelding gedetailleerder te krijgen maar dit vind ik persoonlijk niet nodig. U kunt dat natuurlijk wel doen ;).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
# Als er WEL gebruikersnaam is ingevult
if( isset( $_POST['gebruikersnaam'] ) )
{

    # Als er WEL wachtwoord is ingevult
    if( isset( $_POST['wachtwoord'] ) )
    {

        /*
         Hier plaats je dan regel 22 t/m 63
        */

    }
    else
    {
        # Geen wachtwoord
        echo 'U bent vergeten een wachtwoord in te vullen.';
    }
}

else
{
    # Geen gebruikersnaam
    echo 'U bent vergeten een gebruikersnaam in te vullen.';
}

?>
Gewijzigd op 30/08/2010 19:22:20 door Milo S
 
Niels K

Niels K

30/08/2010 19:29:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php

// Database connectie importeren, deze file moet je nog wel aanmaken
require_once 'db_connect.php';

// Array voor alle foutmeldingen
$aErrors = array( );

// Kijken of de pagina zichzelf heeft aangeroepen en dat alle $_POST variablen zijn gezet. LET OP: Dit behoor je voortaan bij elk formulier afhandeling zo te doen
if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['username'], $_POST['password'] ) )
{

    // Controleren of er een geldige gebruikersnaam is ingevoerd, Controles kan je natuurlijk uitbreiden met de functies: trim, strlen .. etc, nu even simpel
    // Denk ook aan preg_match. Bij registratie kun je afdwingen om een 'sterke' naam te kiezen

    if( !isset( $_POST['username'] ) )
    {

        // Foutmelding toevoegen aan array
        $aErrors[] = 'Geen geldige naam ingevoerd';
    }

    // Controleren of er een geldig wachtwoord is ingevoerd, hier kun je ook gebruik maken van strlen om zo bepalen hoe groot een wachtwoord moet wezen
    // PS: Regex is uit mijn hoofd, dus weet niet zeker of hij klopt

    if( !preg_match( '#\A([a-z]*[0-9]){2,}[a-z]*\z#i', $_POST['password'] ) )
    {

        // Foutmelding toevoegen aan array
        $aErrors[] = 'Geen geldig wachtwoord ingevoerd';
    }

    // Controle uitvoeren of er foutmeldingen zijn opgetreden
    if( count( $aErrors ) == 0 )
    {
    
        // Query maken, en aan de database vragen of hij dezelfde gegevens kan vinden
        $aQuery =
        "
            SELECT
                user_id,
                user_name,
                user_password
            FROM
                users
            WHERE
                user_name = '"
.mysql_real_escape_string( $_POST['username'] ). "'
            AND
                user_password = '"
.mysql_real_escape_string( sha1( $_POST['password'] ) ). "'
        "
;
        
        // Query uitvoeren
        $result = mysql_query( $aQuery );
        
        // Controleren of query gelukt is
        if( !$result )
        {

            $aErrors[] = 'Er is een fout opgetreden bij het uitvoeren van een query';
        }

        else
        {
            // Gegevens komen overeen..
            // Je kunt nu rest van de functies uitvoeren. Nog even over sessies. Je kunt suberglobal gebruiken.
            // session_register komt uit 19 noach...

            
            voorbeeld: $_SESSION['user_id'] = $datawatgefetchtis['user_id'];
        }
    }
}


?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
    <title> Login script .. BETA (a) </title>
</head>
<body>
    <form method="POST" action="" />
        <table>
            <tr>
                <td> Username </td><td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td> Password </td><td><input type="password" name="password" /></td>
            </tr>
        </table>
    </form>
</body>
</html>


Zo even wat code naar je hoofd geslingerd.. Lees goed de commentaar regels.
Om goed een formulier te valideren kan je gebruik maken de ctype functies: Hier weergegeven:

- ctype_digit
- ctype_ alnum
- ctype_ alpha
- ctype_ cntrl
- ctype_ digit
- ctype_ graph
- ctype_ lower
- ctype_ print
- ctype_ punct
- ctype_ space
- ctype_ upper
- ctype_ xdigit

Als je er op klikt, kom je op de documentatie pagina van PHP. De functie wordt daar dan uitgebreid uitgelegd aan de hand van tekst en een aantal voorbeelden.
Verder is het gebruik van preg_match ook belangrijk om je form te valideren.

Om te kijken of een pagina zichzelf heeft aangeroepen gebruiken wij:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$_SERVER
['REQUEST_METHOD'] == 'POST' && isset( alle $_POST variablen )
?>


Verder zie je dat ik gebruik maak van de functie mysql_real_escape_string, dit is om SQL injection tegen te gaan.

Ook is het heel belangrijk om aan fouten afhandeling te doen. Probeer hier dus niet de begrafenisondernemer uit te hangen met de kerkhof methodes ( OR DIE ) maar maak gebruik van een goede if / else structuur.

Verder zoals gisteren al duidelijk is gemaakt is session_register al heeel oud. Het gebruik van de superglobal $_SESSION wordt aangeraden.

Tot slot is moet het fijn zijn om code van jouw te lezen voor andere programmeurs. Programmeer dus overzichtelijk, en zorg voor het nodige commentaar in je code.

EDIT:

Nog een paar tips voor beveiliging:

- Maak gebruik van een salt
- Maak gebruik van tokens
- XSS injection
Gewijzigd op 30/08/2010 19:34:08 door Niels K
 
Milo S

Milo S

30/08/2010 19:41:47
Quote Anchor link
De code van Niels is wel een stuk uitgebreider, als zou ik onder regel 60 wel dit nog maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
else
{
    // Alle errors die eerder in de array zijn gezet weergeven.
    // d.m.v een foreach loop, en de ul li lijst.

    echo '<ul>';
    
        foreach( $aErrors as $error )
        {

            
            echo '<li>'.$error.'</li>';
            
        }

    
    echo '</ul>';
}

?>


Als je dan alles binnen de
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ?>
tekens daaronder plakt moet het werken. Anders zet je wel allemaal errors in een array maar laat je ze voor de rest gewoon zitten.
 
Niels K

Niels K

30/08/2010 20:25:21
Quote Anchor link
Ahh milo.. Helemaal vergeten omdat dat toe te voegen. Dankjewel,

Verder niet onder regel 60, maar onder regel 61 of onder het formulier even php openen code erin gooien en sluiten.
Gewijzigd op 30/08/2010 20:26:17 door Niels K
 
Niek s

niek s

30/08/2010 21:03:14
Quote Anchor link
Niels:
dat login ding wat je daar neer zet.. Wat k niet snap hoe jij weet of de authenticatie gelukt is?

Je Query ziet er goed uit, en die mislukt dus nooit. Ook als de user credits WEL goed zijn. Je vergeet het aantal rows te checken, niet? ;-)

Verder is het escapen (mysql_real_escape_string()) van een sha1() hash niet nodig: een sha1() hash kan immers nooit dergelijke karakters bevatten. Maar ach, het kan ook geen kwaad.

Edit:
Het grootste probleem is dus de if(mysql_num_rows(...) === 1) die je vergeten bent. (of hoe je dat dan ook wil checken, zijn meerdere manieren voor natuurlijk)
Gewijzigd op 30/08/2010 21:04:38 door niek s
 
Niels K

Niels K

30/08/2010 21:15:11
Quote Anchor link
Quote:
dat login ding wat je daar neer zet.. Wat k niet snap hoe jij weet of de authenticatie gelukt is?


Na je edit snapte ik je pas:)
Maar ik schreef:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
// Je kunt nu rest van de functies uitvoeren
?>

En uiteraard bedoelde ik de check die jij voorschrijft. Maar ik zei ook aan het begin dat hij zelf ook dingen moest uitvoeren. Ik was hem niet vergeten, integendeel het was expres gedaan. Maar ik snap dat je dacht dat ik het vergeten was want ik deel leg het niet goed uit. Ik zal de tekst iets aanpassen.
Gewijzigd op 30/08/2010 21:16:32 door Niels K
 
Pim -

Pim -

30/08/2010 22:08:53
Quote Anchor link
Waarom zou je in godsnaam die username en password gaan valideren? Als er onzin wordt opgegeven, krijg je gewoon 0 rows als resultaat... Uiteraard wel htmlentities() bij het weergeven, maar dat is een ander verhaal.
Gewijzigd op 30/08/2010 22:12:00 door Pim -
 
Elio vp

Elio vp

31/08/2010 00:18:23
Quote Anchor link
login.class.php
---------------

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
session_start();

class Login{

    private $dbhost = 'localhost';
    private $dbname = 'name';
    private $dbuser = 'user';
    private $dbpass = '****';
    private $usertable = 'usertable';
    private $connect;
    private $result_to;
    private $data;

    

    public $dbresponse;

    public $response;


    public function __construct(){

        $this->connect = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass);

        if(!$this->connect){

            echo "<h4>Kan geen connectie maken met de database, kijk je gegevens even na.</h4>";

        }
else{

            mysql_select_db($this->dbname);

            //echo "<h4>Perfect geconnecteerd.</h4>";

        }

    }



    public function  __destruct() {

        mysql_close($this->connect);

    }



    public function query_execute($query){

        $this->result_to = mysql_query($query);

        if(!$this->result_to){

            echo '<h4>query kon niet worden uitgevoerd</h4';

        }
else{

            return $this->result_to;

        }
                
    }

    

    public function fetch_data($result){

        if(!$result){

            $rows = NULL;

        }
else{

            $row = mysql_fetch_array($result);

            return $row;

        }

    }



    public function login_user($username, $password){
        
        $username = mysql_real_escape_string($username);
        $password = mysql_real_escape_string($password);

        $password = md5($password);

        $sql = "SELECT username,password FROM clients WHERE username = '$username' AND password = '$password' limit 1";

        $result = $this->query_execute($sql);

        $this->data = $this->fetch_data($result);

        if(!$this->data){

            return 'Voer alstublief de correcte gegevens in.';

        }
else{

            $_SESSION['username'] = $this->data['username'];
            $_SESSION['permission'] = 'yes';
            header('location: securearea.php');
            //echo $_SESSION['username'];
        }

    }


    public function logout(){
        /*
        if(isset($_SESSION['permission'])) {
            unset($_SESSION['permission']);

            if(isset($_COOKIE[session_name()]))
                setcookie(session_name(), '', time() - 1000);
                session_destroy();
    }
         * */

        session_destroy();
        return 'U bent uitgelogd';

    }


    public function session_check() {

                

                echo $_SESSION['username'];

        if($_SESSION['permission'] != 'yes') {

                   // header("location: index.php");

                    return 'U hebt niet de bevoegdheden om deze pagina te bezichtigen';
                    
                }
else{
                    //header("location: securearea.php");
                    return 'U bent ingelogd';

                }
                
    }
}


?>


securearea.php
--------------
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

include_once 'login.class.php';

$securearea = new Login();

$response = $securearea->session_check();

?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($response)) echo "<h4>" . $response . "</h4>"; ?>

<p>
Hier zitten de veilige dingen!
</p>
<a href="voorbeeld.php?val=0">uitloggen</a>


voorbeeld.php
-------------
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

include_once 'login.class.php';

$obj = new Login();

if(isset($_GET['val']) && $_GET['val'] == '0') {
    $obj->logout();
}


if(isset ($_POST[submit])) {

       $response = $obj->login_user($_POST['username'],$_POST['username']);
}

?>


<form action="sample.php" method="POST">
username : <input name = "username" type="text" /><br/>
password : <input name = "password" type ="password" /><br/>
<input name ="submit" type ="submit" value ="login" />
</form>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($response)) echo "<h4>" . $response . "</h4>"; ?>



Misschien kan je hier wel wat mee :)

Groeten!
 
Paco oste

Paco oste

31/08/2010 02:25:33
Quote Anchor link
Niels Kieviet op 30/08/2010 19:29:44:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php

// Database connectie importeren, deze file moet je nog wel aanmaken
require_once 'db_connect.php';

// Array voor alle foutmeldingen
$aErrors = array( );

// Kijken of de pagina zichzelf heeft aangeroepen en dat alle $_POST variablen zijn gezet. LET OP: Dit behoor je voortaan bij elk formulier afhandeling zo te doen
if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['username'], $_POST['password'] ) )
{

    // Controleren of er een geldige gebruikersnaam is ingevoerd, Controles kan je natuurlijk uitbreiden met de functies: trim, strlen .. etc, nu even simpel
    // Denk ook aan preg_match. Bij registratie kun je afdwingen om een 'sterke' naam te kiezen

    if( !isset( $_POST['username'] ) )
    {

        // Foutmelding toevoegen aan array
        $aErrors[] = 'Geen geldige naam ingevoerd';
    }

    // Controleren of er een geldig wachtwoord is ingevoerd, hier kun je ook gebruik maken van strlen om zo bepalen hoe groot een wachtwoord moet wezen
    // PS: Regex is uit mijn hoofd, dus weet niet zeker of hij klopt

    if( !preg_match( '#\A([a-z]*[0-9]){2,}[a-z]*\z#i', $_POST['password'] ) )
    {

        // Foutmelding toevoegen aan array
        $aErrors[] = 'Geen geldig wachtwoord ingevoerd';
    }

    // Controle uitvoeren of er foutmeldingen zijn opgetreden
    if( count( $aErrors ) == 0 )
    {
    
        // Query maken, en aan de database vragen of hij dezelfde gegevens kan vinden
        $aQuery =
        "
            SELECT
                user_id,
                user_name,
                user_password
            FROM
                users
            WHERE
                user_name = '"
.mysql_real_escape_string( $_POST['username'] ). "'
            AND
                user_password = '"
.mysql_real_escape_string( sha1( $_POST['password'] ) ). "'
        "
;
        
        // Query uitvoeren
        $result = mysql_query( $aQuery );
        
        // Controleren of query gelukt is
        if( !$result )
        {

            $aErrors[] = 'Er is een fout opgetreden bij het uitvoeren van een query';
        }

        else
        {
            // Gegevens komen overeen..
            // Je kunt nu rest van de functies uitvoeren. Nog even over sessies. Je kunt suberglobal gebruiken.
            // session_register komt uit 19 noach...

            
            voorbeeld: $_SESSION['user_id'] = $datawatgefetchtis['user_id'];
        }
    }
}


?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
    <title> Login script .. BETA (a) </title>
</head>
<body>
    <form method="POST" action="" />
        <table>
            <tr>
                <td> Username </td><td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td> Password </td><td><input type="password" name="password" /></td>
            </tr>
        </table>
    </form>
</body>
</html>


Zo even wat code naar je hoofd geslingerd.. Lees goed de commentaar regels.
Om goed een formulier te valideren kan je gebruik maken de ctype functies: Hier weergegeven:

- ctype_digit
- ctype_ alnum
- ctype_ alpha
- ctype_ cntrl
- ctype_ digit
- ctype_ graph
- ctype_ lower
- ctype_ print
- ctype_ punct
- ctype_ space
- ctype_ upper
- ctype_ xdigit

Als je er op klikt, kom je op de documentatie pagina van PHP. De functie wordt daar dan uitgebreid uitgelegd aan de hand van tekst en een aantal voorbeelden.
Verder is het gebruik van preg_match ook belangrijk om je form te valideren.

Om te kijken of een pagina zichzelf heeft aangeroepen gebruiken wij:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$_SERVER
['REQUEST_METHOD'] == 'POST' && isset( alle $_POST variablen )
?>


Verder zie je dat ik gebruik maak van de functie mysql_real_escape_string, dit is om SQL injection tegen te gaan.

Ook is het heel belangrijk om aan fouten afhandeling te doen. Probeer hier dus niet de begrafenisondernemer uit te hangen met de kerkhof methodes ( OR DIE ) maar maak gebruik van een goede if / else structuur.

Verder zoals gisteren al duidelijk is gemaakt is session_register al heeel oud. Het gebruik van de superglobal $_SESSION wordt aangeraden.

Tot slot is moet het fijn zijn om code van jouw te lezen voor andere programmeurs. Programmeer dus overzichtelijk, en zorg voor het nodige commentaar in je code.

EDIT:

Nog een paar tips voor beveiliging:

- Maak gebruik van een salt
- Maak gebruik van tokens
- XSS injection


Ik heb vraagje voor niels waarom
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['username'], $_POST['password'])){

En niet?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['username'] && $_POST['password'])){
 
Jelmer -

Jelmer -

31/08/2010 08:48:51
Quote Anchor link
Omdat isset() één of meer mogelijke variabelen als argumenten kan krijgen (mogelijke, omdat isset() juist controleert of die variabele daadwerkelijk bestaat)

Door die && ertussen te zetten maak je er een expressie van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
isset(
    (
        ((bool) $_POST['username'])
        &&
        ((bool) $_POST['password'])
    )
)

PHP probeert eerst dat &&-statement uit te voeren, en daarbij pakt hij de waarden uit $_POST['username'] en $_POST['password'], ervan uitgaande dat die bestaan. Bestaan ze niet (hence isset) dan krijg je alsnog je notice.
 
Raymond van Os

raymond van Os

31/08/2010 11:40:44
Quote Anchor link
het is inderdaat een goed idee om sessies en cookies te combineren dat is namelijk veiliger. ps leuk script verder
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.