Beveiliging van login script en aanmeldings script.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ocirina Ocirina

Ocirina Ocirina

20/01/2011 00:30:31
Quote Anchor link
Wat vinden jullie hiervan? kan de beveiliging beter?
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
<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST')        // Controle of er op de knop is gedrukt.
{

include_once 'connect.php';            // Connectie met database.

    if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password'])) // Controle voor de invulling.
    {
        $controle = true;
    }

    else
    {
        $controle = false;
    }

    // functie defineren.
    function login($gebruikersnaam, $password, $controle = true)
    {

        if($controle)
        {

            $sql = mysql_query("SELECT gebruikersnaam AND password FROM gebruikers WHERE gebruikersnaam IS = '".$gebruikersnaam."'");
            while($row = mysql_fetch_array($sql))
            {

                if(($row['password']) == md5($gebruikersnaam))
                {

                    echo 'U bent ingelogd'; // YEEH! pers. is ingelogd.
                }
                else
                {
                    header('Refresh: 2; url=index.php');
                    echo 'De ingevoerde gegevens waren niet correct, probeer het opnieuw.';
                }
            }
        
        }

        else
        {
            echo 'U heeft een van de gegevens niet goed ingevuld.';        // Negatieve melding van ingevoerde gegevens.
        }
    }

    
    login(($_POST['gebruikersnaam']), ($_POST['password']), $controle);
    
}

else
{
    header('Refresh: 2; url=login.php'); // Negatief op de verwerk pagina gekomen, direct terug verwijzen met gepaste melding.
    echo 'U bent op de verkeerde pagina gekomen, u wordt doorverwezen.';
}

?>


Toevoeging op 20/01/2011 00:34:11:

Maar buiten dat wat vinden jullie hiervan?
PRUT of gaat wel na wat verbetering?
Gewijzigd op 20/01/2011 11:53:54 door Ocirina Ocirina
 
PHP hulp

PHP hulp

18/12/2024 11:39:40
 
- SanThe -

- SanThe -

20/01/2011 01:04:51
Quote Anchor link
Het gebruik van een function is hier een beetje onzinnig. Verder is het ook niet overzichtelijk om een function ergens midden in je script te zetten tussen if()-jes in.

Je script is lek => sql-injection.

Waarom in de query niet ook gelijk het password vergelijken? Scheelt code. Ook ontbreekt de foutafhandeling voor de query. Als je foutafhandeling had, dan had je gezien dat 'IS =' een fout geeft.
 
Joey van der wal

joey van der wal

20/01/2011 01:06:40
Quote Anchor link
is dit niet sql injectie gevoelig?
 
Ocirina Ocirina

Ocirina Ocirina

20/01/2011 10:57:18
Quote Anchor link
Ik heb het wat aangepast, wat vinden jullie er nu van?
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
<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST')        // Controle of er op de knop is gedrukt.
{

include_once 'connect.php';            // Connectie met database.

    if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password'])) // Controle voor de invulling.
    {
        $controle = true;
    }

    else
    {
        $controle = false;
    }

  
        if($controle)
        {

        $gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']);
        $password        = mysql_real_escape_string($_POST['password']);
            $sql = mysql_query("SELECT gebruikersnaam AND password FROM gebruikers WHERE gebruikersnaam IS '".$gebruikersnaam."'");
            while($row = mysql_fetch_array($sql))
            {

                if(($row['password']) == md5($password))
                {

                    echo 'U bent ingelogd'; // YEEH! pers. is ingelogd.
                }
                else
                {
                    header('Refresh: 2; url=login.php');
                    echo 'De ingevoerde gegevens waren niet correct, probeer het opnieuw.';
                }
            }
        
        }

        else
        {
            echo 'U heeft een van de gegevens niet goed ingevuld.';        // Negatieve melding van ingevoerde gegevens.
        }
    
    
}

else
{
    header('Refresh: 2; url=login.php'); // Negatief op de verwerk pagina gekomen, direct terug verwijzen met gepaste melding.
    echo 'U bent op de verkeerde pagina gekomen, u wordt doorverwezen.';
}

?>
Gewijzigd op 20/01/2011 11:01:13 door Ocirina Ocirina
 

20/01/2011 11:05:16
Quote Anchor link
Je kunt ook de controle doen binnen die if en else waar je nu die var $controle zet.
Je kunt ook $password = md5($_POST['password'] doen.
In de query kun je dan WHERE gebruikersnaam='". $gebruikersnaam . "' AND wachtwoord='" . $password . "'" doen.
 
Ocirina Ocirina

Ocirina Ocirina

20/01/2011 11:12:16
Quote Anchor link
Oke, dankje voor je reactie.
"Je kunt ook de controle doen binnen die if en else waar je nu die var $controle zet."
Welke controle? dit begrijp ik niet helemaal.
Ik heb hem aangepast maar wat moet ik nu doen? Soort van sessie starten, daar heb ik nog geen ervaring mee.
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
<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST')        // Controle of er op de knop is gedrukt.
{

include_once 'connect.php';            // Connectie met database.

    if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password'])) // Controle voor de invulling.
    {
        $controle = true;
    }

    else
    {
        $controle = false;
    }

  
        if($controle)
        {

        $gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']);
        $password        = mysql_real_escape_string(md5 ($_POST['password']));
        $sql = mysql_query("SELECT gebruikersnaam AND password FROM gebruikers WHERE gebruikersnaam='". $gebruikersnaam . "' AND wachtwoord='" . $password . "'");
            
        // WAT MOER HIER???
        
        }
        else
        {
            echo 'U heeft een van de gegevens niet goed ingevuld.';        // Negatieve melding van ingevoerde gegevens.
        }
    
    
}

else
{
    header('Refresh: 2; url=login.php'); // Negatief op de verwerk pagina gekomen, direct terug verwijzen met gepaste melding.
    echo 'U bent op de verkeerde pagina gekomen, u wordt doorverwezen.';
}

?>


Toevoeging op 20/01/2011 11:52:29:

Heel luxe forum hier...
Maar omdat me andere topic is gesloten. Voeg ik dit script toe, graag jullie mening en op of aanmerkingen.
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
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') // Controle of er op de knop is geklikt.
{
include_once 'connect.php';
    
    if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password']) AND !empty($_POST['passwordc']) AND !empty($_POST['mail'])) // Controle op invulling.
    {
        if(($_POST['password']) == ($_POST['passwordc']))
        {

            $controle = true;
        }

        else
        {
            $controle = false;
        }
    }

    else
    {
        $controle = false;
    }


    

    if($controle)
    {

        $gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']);
               $password        = mysql_real_escape_string(md5 ($_POST['password']));
               $sql = mysql_query("SELECT gebruikersnaam AND password FROM gebruikers WHERE gebruikersnaam='". $gebruikersnaam . "' AND wachtwoord='" . $password . "'");
            
            if($sql != NULL)
            {

                $sql = mysql_query("INSERT INTO gebruikers VALUES ". $gebruikersnaam . ", " . $password . "'");
                header('Refresh: 2; url=login.php');
                echo 'U bent succesvol aangemeld, u kunt nu inloggen.';
            }

            else
            {
                header('Refresh: 3; url=registreren.php');
                echo 'U bent niet aangemeld, probeer het opnieuw met een ander wachtwoord of gebruikersnaam.';
            }

    }

    else
    {
        echo 'De ingevoerde gegevens kloppen niet, niet alles is ingevuld of u heeft het controle wachtwoord verkeerd ingevuld.';
    }
    
    

}

else
{
    header('Refresh: 2; url=registeren.php'); // Doorverwijzen met gepaste melding.
    echo 'U bent op de verkeerde pagina gekomen, U wordt doorverwezen.';
}


?>


Toevoeging op 20/01/2011 11:57:22:

Leuk beleid, open een paar keer een nieuw topic meteen een waarschuwing.
Wat kinderachtig, ook nog een verkeerd topic vermengen.
Quote:
Beste Ocirina,

Meermaals posten van dezelfde code heeft geen zin. Probeer je probleem in 1 topic op te lossen.

Registratie beter beveiligen?
error op line 21....
Is dit een duidelijk php script?

Dit is een officiële waarschuwing.

Met vriendelijke groeten,
Het PHPHulp-team.
Gewijzigd op 20/01/2011 11:58:07 door Ocirina Ocirina
 

20/01/2011 12:02:17
Quote Anchor link
If-else blok van regel 25 t/m 47 kan verwerkt worden in het blok van 9 t/m 21.
md5 levert geen sql gevaarlijke tekens op.
Zie de return types van mysql_query voor check.
Is dit een registratie of een login script?
Je hebt zo te zien wel drie keer hetzelfde topic geopend. Kan ook allemaal in één.
 
Pim -

Pim -

20/01/2011 12:21:51
Quote Anchor link
Vrij komische beveiliging.

HTTP Redirects uitzetten en je bent binnen.
Altijd exit; na een redirect!!!!!!!!!!!!

Ik snap niet waarom niemand dit eerder heeft gezegd...
Gewijzigd op 20/01/2011 12:22:02 door Pim -
 
Jens V

Jens V

20/01/2011 12:25:55
Quote Anchor link
Als je je HTTP redirects uit zet, ben je binnen... in de else... Juij! Joy!
Maar idd, je moet een exit doen of iets dergelijks na een header('Location....');
 
Ozzie PHP

Ozzie PHP

20/01/2011 12:26:04
Quote Anchor link
Pim - op 20/01/2011 12:21:51:
HTTP Redirects uitzetten en je bent binnen.
Altijd exit; na een redirect!!!!!!!!!!!!

Kun je dan nog iets doen na een redirect eigenlijk? Je bent dan toch van de pagina af?
 

20/01/2011 12:31:07
Quote Anchor link
Pim - op 20/01/2011 12:21:51:
Vrij komische beveiliging.

HTTP Redirects uitzetten en je bent binnen.
Altijd exit; na een redirect!!!!!!!!!!!!

Ik snap niet waarom niemand dit eerder heeft gezegd...


Zou je misschien even willen aangeven hoe precies? Ik heb geen zin om dat hele script te doorlopen, aangezien die logica toch nog steeds niet correct is.

Ozzie PHP op 20/01/2011 12:26:04:
Pim - op 20/01/2011 12:21:51:
HTTP Redirects uitzetten en je bent binnen.
Altijd exit; na een redirect!!!!!!!!!!!!

Kun je dan nog iets doen na een redirect eigenlijk? Je bent dan toch van de pagina af?

Nee, de browser krijgt een header aangeleverd dat hij op een andere pagina moet kijken. De output stopt niet.

Edit: De SQL rammelt ook.
Gewijzigd op 20/01/2011 12:33:33 door
 
Ocirina Ocirina

Ocirina Ocirina

20/01/2011 14:00:23
Quote Anchor link
Hallo, ik heb het een beetje verbeterd.
@karl waarom rammelt de SQL?
In ieder geval bedankt voor jullie reacties, en inderdaad ik moet in één topic overgaan.
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
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') // Controle of er op de knop is geklikt.
{
    include_once 'connect.php';

    if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password']) AND !empty($_POST['passwordc']) AND !empty($_POST['mail']))
    {

        if(($_POST['password']) == ($_POST['passwordc']))
        {

            $gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']);
            $password        = mysql_real_escape_string(md5 ($_POST['password']));
            $sql = mysql_query("SELECT gebruikersnaam AND password FROM gebruikers WHERE gebruikersnaam='". $gebruikersnaam . "' AND wachtwoord='" . $password . "'");
            
            if($sql != NULL)
            {

                mysql_query("INSERT INTO gebruikers VALUES ". $gebruikersnaam . ", " . $password . ", " . ($_POST['mail']) . "");
                header('Refresh: 2; url=login.php');
                exit ('U bent succesvol aangemeld, u kunt nu inloggen.');
            }

            else
            {
                header('Refresh: 3; url=registreren.php');
                exit ('U bent niet aangemeld, probeer het opnieuw met een ander wachtwoord of gebruikersnaam.');
            }
    }

    else
    {
        header('Refresh: 3; url=registreren.php');
            exit ('De ingevoerde gegevens kloppen niet, u heeft het controle wachtwoord verkeerd ingevuld.');
    }

    }

    else
    {
    header('Refresh: 3; url=registreren.php');
        exit ('De ingevoerde gegevens kloppen niet, niet alles is ingevuld.');
    }
    
    

}

else
{
    header('Refresh: 2; url=registeren.php'); // Doorverwijzen met gepaste melding.
    exit ('U bent op de verkeerde pagina gekomen, U wordt doorverwezen.');
}


?>
Gewijzigd op 20/01/2011 14:06:07 door Ocirina Ocirina
 
Ozzie PHP

Ozzie PHP

20/01/2011 14:01:28
Quote Anchor link
Karl Karl op 20/01/2011 12:31:07:
[Nee, de browser krijgt een header aangeleverd dat hij op een andere pagina moet kijken. De output stopt niet.

Dit kan ik even niet volgen. Dus als je met location of redirect een andere pagina aanroept en je hebt na de headers nog code of output staan, dan wordt dat gewoon uitgevoerd??
 
Bas Cost Budde

Bas Cost Budde

20/01/2011 15:06:22
Quote Anchor link
Yep. header() is wat dat betreft te vergelijken met print(), niet met exit().

hey, exit() is hetzelfde als die()!
Gewijzigd op 20/01/2011 15:07:38 door Bas Cost Budde
 
Ozzie PHP

Ozzie PHP

20/01/2011 15:09:45
Quote Anchor link
Maar hoe doe je dan een volledige redirect in je code? Of gaat dat gewoon altijd via een header en een exit / die?
 
Jaron T

Jaron T

20/01/2011 15:10:39
Quote Anchor link
Ozzie PHP op 20/01/2011 14:01:28:
Karl Karl op 20/01/2011 12:31:07:
[Nee, de browser krijgt een header aangeleverd dat hij op een andere pagina moet kijken. De output stopt niet.

Dit kan ik even niet volgen. Dus als je met location of redirect een andere pagina aanroept en je hebt na de headers nog code of output staan, dan wordt dat gewoon uitgevoerd??


jeps..

header();
mysql_query();

mysql query wordt hier gewoon uitgevoerd..
 
Ozzie PHP

Ozzie PHP

20/01/2011 15:18:49
Quote Anchor link
Ozzie PHP op 20/01/2011 15:09:45:
Maar hoe doe je dan een volledige redirect in je code? Of gaat dat gewoon altijd via een header en een exit / die?
 
Bas Cost Budde

Bas Cost Budde

20/01/2011 15:20:07
Quote Anchor link
That's it sir! En als je dat vaker doet, maak je er "natuurlijk" een methode/functie van :)
 

20/01/2011 15:20:28
Quote Anchor link
Ja, je doet een header en dan moet je zelf exiten om te zorgen dat er geen data wordt verstuurd die je niet wilt versturen (Want je wilt redirecten).
Zo 1-2-3 zag ik niet een probleem in dit script... Maar ik kijk dan ook gewoon vlot.
Het is verstandig om altijd een exit na een redirect / location / whatever te doen.
 
Ozzie PHP

Ozzie PHP

20/01/2011 15:38:58
Quote Anchor link
Oke, thanks... altijd goed om te weten!
 
Ocirina Ocirina

Ocirina Ocirina

20/01/2011 16:11:34
Quote Anchor link
Maar zoals ik hem nu als laatst heb gepost bevat hij verder geen problemen? Of beveiligings fouten?
Gewijzigd op 20/01/2011 16:19:55 door Ocirina Ocirina
 

Pagina: 1 2 volgende »



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.