is dit veilig md5

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hendrik net

hendrik net

04/05/2011 06:28:20
Quote Anchor link
ik ben pas begonnen met php en heb een puntensysteem gemaakt na hier te vragen hoe ik mds gebruik merkte ik dat het script dat ik had niet echt veilig was daar waar de reacties hier grotendeels over gingen.

ik ben ook aan het leren geweest over sesies en heb hetvolgende gemaakt en geleerd waarom alles zo is het laatste wat ik wil is iets verkeer leren of een wachtwoord script leren die eiegenlijk helemaal niet zo veilig is, dus vandaar
de vraag is dit veilig

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
<?php

                    //variabelen
    
    //naam van uw host

        $host = "localhost";
    //naam die u gebruikt bij host
        $hostnaam = "root";    
    //pasword bij host
        $hostpw = "";
    //naam van de database
        $databasenaam = "gebruikers";
    //naam van tabel in database
        $tabel = "gebruikerstabel"; //

    //opgehaalde informatie van het formulier in loginpage.html

        $naamform = $_POST['naam'];
    //passwoord wordt omgezet in md5
        $pwform = md5($_POST['wachtwoord']);

        
                    //einde variabelen

    // check of de gebruiker niet diect deze pagina probeert te benaderen
    // zo ja terugsturen naar waar hij wel in hoort te loggen

    
    if (!isset($naamform) || !isset($pwform)) {
header( "Location: loginpage.html" );
}

                    //connecten naar mysql server
    
    mysql_connect("$host","$hostnaam","$hostpw")
        //als dit niet lukt
    or die ("kan niet connecten naar server");

        //connecten naar database
    
    mysql_select_db("$databasenaam")
        //als dit niet lukt
    or die ("kan niet connecten naar database");


                    //connectie gemaakt
                    
    //injectie beveiliging


$naamform = stripslashes($naamform);
$pwform = stripslashes($pwform);
$naamform = mysql_real_escape_string($naamform);
$pwform = mysql_real_escape_string($pwform);

    //slecteer alles van tabel waar naam = de ingevulde naam en password is ingevulde password
$sql="SELECT * FROM $tabel WHERE naam='$naamform' and wachtwoord='$pwform'";
$result=mysql_query($sql);

    // tellen hoeveel rijen er gevonden worden met de combinatie van deze naam en wachtwoord
$count=mysql_num_rows($result);

    //als het resultaat aantal gevonden rijen gelijk is aan 1
    if(mysql_num_rows($result)=='1')
    //voer dan hetvolgende uit
                {
                //start sessie
                session_start();
                //ipv register_session opdat dit fouten geeft bij php 5.3.5
                //registreren van sesie

                $_SESSION['naam'] = $naamform;
                //en doorsturen naar de beveiligde pagina
                header("location:login_ok.php");
                    exit;
                }

    //als het resultaat niet gelijk is aan 1
    else
        {
    //vertel dan dat er iets niet klopt
        echo "de combinatie van het wachtwoord en de naam klopt niet";
        }

    
    
?>

ik gebruik dan het volgende voor beveiligde pagina's

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
//sesion_start(); dient altijd bovenaan in het script te staan
session_start();
//als er succesvol is ingelogd
if(isset($_SESSION['naam']))
{

//deze echo is om te laten zien dat het script werkt en kan verwijderd worden
echo "welkom ". $_SESSION['naam'] . " u bent nu ingelogd";
//tussen deze brackets kunt u de webpagina waarnaar toegang wordt verschafd plaatsen
}
//en anders
else
{
//sturen we de mensen gewoon lekker terug naar >loginpage.html<
header("location:loginpage.html");
}

?>


zoals je wel ziet heb ik overal aantekeningen bijgezet zo leer ik mezelf aan wat de rede is van alles en wat alles precies doet dus ook als ik daarin iets niet goed heb beschreven mag je me uitschelden :P als je maar wel wilt vertellen wat het dan wel hoort te zijn.
 
PHP hulp

PHP hulp

23/12/2024 01:11:19
 
Jasper DS

Jasper DS

04/05/2011 07:42:53
Quote Anchor link
- codeer netjes (mooi inspringen,...)
- gebruik geer or die maar een nette foutafhandeling
- gebruik ook bij je query een nette foutafhandeling
- session_start() hoort bovenaan
- waarom tel je twee keer? lijn 60 en 57
- haal je vars buiten de quotes (bij de sql)
- $naamform = $_POST['naam']; -> is onnodig
- het is raadzaam om enkele quotes te gebruiken ('), bij sql wel dubbele.
Gewijzigd op 04/05/2011 07:43:15 door Jasper DS
 
Maarten PHP

Maarten PHP

04/05/2011 07:50:09
Quote Anchor link
- Maak geen onnodig variables aan.
 
Hendrik net

hendrik net

04/05/2011 08:32:56
Quote Anchor link
netjes vindt ik het wel zo ik heb er aandacht aan besteed om het overzichtelijk te houden.

mischien dat ik bij sql wel wat meer georganizeerd kan zijn.

netjes afhandelen volgens jou tut wil ik mezelf wel aanleren maar wil graag weten wat E_ALL | E_strict precies inhoudt, wil graag weten wat ik neerzet.

sesion start in het begin ja logisch eigenlijk bedankt
ik heb het daar waar de sesie aangemaakt wordt gedaan gewoon puur omdat bijna elke tutorial
over sesies met wachtwoorden bijna de sesie daar pas opend.

2keer tellen stom, die variable is er nie voor niks :S

wist niet dat je geen quotes hoeft te gebruiken bij sql en variables

en maken die enkele quotes dan echt uit ipv "
vin die ' gewoon best irritand typen omdat ze pas tevorschijn komen nadat je het volgende karakter hebt ingetypt.


is het mischien een goed id om ipv en die nette foutafhandeling en de variables
bovenin

een include(''); te gebruiken waar dat allemaal instaat
of is een required(''); beter

bedankt voor de reacties
 
Wouter J

Wouter J

04/05/2011 09:59:22
Quote Anchor link
Een goede foutafhandeling + uitleg kan je hier vinden: http://snipplr.com/view/45252/goede-foutafhandeling-mysql/

hendrik net op 04/05/2011 08:32:56:
netjes vindt ik het wel zo ik heb er aandacht aan besteed om het overzichtelijk te houden.

Probeer een beetje goed in te springen. Je hebt nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  if($iets == 'iets') {
echo 'iets';
  }

?>

Beter is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  if($iets == 'iets') {
    echo 'iets';
  }

?>

Nog overzichtelijker zou zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
  if($iets == 'iets')
  {
// Als iets iets is
    echo 'iets';
  }

?>


hendrik net op 04/05/2011 08:32:56:
netjes afhandelen volgens jou tut wil ik mezelf wel aanleren maar wil graag weten wat E_ALL | E_strict precies inhoudt, wil graag weten wat ik neerzet.

E_ALL en E_STRICT zet alle errors aan (E_ALL) en zet de mode in strict (E_STRICT) waardoor ook waarschuwingen getoond worden. Als je een script maakt moet je deze altijd zo aanzetten, als het een online site wordt moet je alles uitzetten. Zie ook error_reporting

hendrik net op 04/05/2011 08:32:56:
wist niet dat je geen quotes hoeft te gebruiken bij sql en variables

SQL moet wel in quotes, maar de variabelen niet. Dus "Hallo ik ben $naam" is verkeerd, maar 'Hallo ik ben '.$naam is goed.
Merk op dat ik in het begin dubbele quotes gebruik en bij het goede voorbeeld enkele quotes. Dit omdat dubbele quotes wel variabelen parsen (dus $naam vervangen door de value van $naam), maar enkele quotes dat niet doen.

hendrik net op 04/05/2011 08:32:56:
en maken die enkele quotes dan echt uit ipv "
vin die ' gewoon best irritand typen omdat ze pas tevorschijn komen nadat je het volgende karakter hebt ingetypt.

Ja, de " parsed ook nog alle variabelen. Dus zodra je enkele quotes gebruikt gaat hij eerst de hele string afzoeken naar variabelen en vervolgens kan hij de string pas gaan gebruiken. Bij enkele quotes worden geen variabelen geparsed, dus dan kan PHP er meteen wat meedoen.
Als je trouwens een spatie typed komen de enkele quotes ook tevoorschijn.

hendrik net op 04/05/2011 08:32:56:
sesion start in het begin ja logisch eigenlijk bedankt

Het is ook niet verplicht, het is verstandig om dat zo te doen. Zie hiervoor ook deze tut: http://www.phphulp.nl/php/tutorial/php-algemeen/header-already-sent/738/

hendrik net op 04/05/2011 08:32:56:
is het mischien een goed id om ipv en die nette foutafhandeling en de variables bovenin een include(''); te gebruiken waar dat allemaal instaat
of is een required(''); beter

Je kan inderdaad als je deze verbinding vaker gebruikt een config bestandje maken. Hierin staan dan de variabele voor de connectie en de connectie + db select. De query wordt dan weer uitgevoerd in het normale bestand, hierin wordt de config geincluded.
Het is in dit geval beter require te gebruiken. Dit staat ook uitgelegd op php.net. Bij include gaat het script namelijk gewoon door als hij het bestand niet kan vinden, maar bij require wordt het hele script stop gezet en krijg je een error. Aangezien er in dat bestand belangrijke informatie staat (db verbinding) en de rest van het bestand niet zonder die ene config kan kan je beter dan een error krijgen.
 



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.