[PHP]Inlogscript probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleempje met mijn inlogscript. De bedoeling is dat ik mijn inlogsystem kan includen en kan plaatsen op de plek waar ik dat wil.
Ik zou graag de foutmeldingen boven mijn inlogvelden willen hebben, maar dit wilt maar niet lukken.

Ik ben nog maar een beginnende PHP'er (wat je waarschijnlijk wel zult zien :X ), maar ik zou het wel zo snel mogelijke willen oplossen

Het inlogscript:
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
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
<?php
require ('connect.php');
$Continue = true;


//Controleren of de gegevens in de cookie overeen komen
if (isset($_COOKIE["jorkoekje"]))
 {
  $cookieinlog = mysql_query("SELECT * FROM gebruiker 
   WHERE gebruikersnaam='".$_COOKIE['userkoekje']."' AND wachtwoord='".$_COOKIE['passkoekje']."'") 
                 or die(mysql_error()); 
  $rowCheck2 = mysql_num_rows($cookieinlog);
 }
//Als gegevens in de cookie overeen komen een sessie maken
if ($rowCheck2 > 0)
 {
  session_start(); 
  $_SESSION["user"] = 1;
  $_SESSION["naam"] = $_COOKIE['userkoekje'];
 }
 

//Indien er op de inlogknop is gedrukt
if(isset($_POST['submit']))
 { 
  //indien gebruikersnaam niet is ingevuld laat melding zien
  if (($Continue) and (empty($_POST['gebruikersnaam'])))
   { 
    echo "U heeft geen gebruikersnaam ingevuld!";
    $Continue = false;
   }
  //indien wachtwoord niet is ingevuld laat melding zien
  if(($Continue) and (empty($_POST['password'])))
   { 
    echo"Je hebt geen wachtwoord ingevuld!";
    $Continue = false;
   }
  //Als 'onthoud mij' is aangevinkt cookie's aanmaken
  if(($Continue) and (isset($_POST['rememberme'])))
   {
    setcookie("jorkoekje", md5(md5(Test)), time()+60*60*24*30, "/");
    setcookie("userkoekje", $_POST['gebruikersnaam'], time()+60*60*24*30, "/");
    setcookie("passkoekje", md5($_POST['password']), time()+60*60*24*30, "/");
   }
    
    
  //indien beide velden zijn ingevuld controleren in database
  if ($Continue)
   {
    $sessioninlog = mysql_query("SELECT * FROM gebruiker 
     WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord= md5('".$_POST['password']."')") 
                    or die(mysql_error()); 
    $rowCheck1 = mysql_num_rows($sessioninlog); 

    //maak sessie aan als inloggegevens in dezelfde result staan
    if($rowCheck1 > 0)
     { //maak een sessie aan
      session_start(); 
      $_SESSION["user"] = 1;
      $_SESSION["naam"] = $_POST["gebruikersnaam"];
     }
    //als inloggegevens incorrect zijn geef foutmelding
    else
     {
      echo"Deze inloggegevens zijn incorrect!";
     }
   } 
 }
  

//Deze functie zorgt ervoor dat dat de inlogvelden op de pagina verschijnen
function displayInloggen()
{
 //Als er een cookie is gevonden gegevens uit de database halen
 if (isset($_COOKIE["userkoekje"])) 
  {
   $query = "select * from gebruiker where gebruikersnaam='".$_COOKIE["userkoekje"]."'";
   $result = mysql_query($query);
   $item = mysql_fetch_object($result);
  }

 $action = $_Server['PHP_SELF'];
 $form = "<form action='$action' method='post'>
      Gebruikersnaam: <input type='text' name='gebruikersnaam' value='$item->gebruikersnaam'/><br>
      Wachtwoord: <input type='password' name='password'/><br>
      <input type='checkbox' name='rememberme' value='Onthoud mij!' /> Onthoud mij!
      <input type='submit' name='submit' value='Log in!' />
      <a href='gegevens.php'>Registreren</a> | 
      <a href='ww.php'>Wachtwoord vergeten</a>
     </form>";
 
 //Als er een sessie is gevonden ingelogdblokje laten zien
 if($_SESSION["user"] == 1)
  { ?>
   U bent ingelogd als <?php echo $_SESSION["naam"] ?><br />
   <a href='downloads.php'>Downloads</a><br /><br />
   Wijzigen:<a href='gegevens.php'>Gegevens</a>
    | <a href='ww.php'>Wachtwoord</a><br /><br />
   <a href='logout.php'>>Uitloggen</a>
   <?php
   $Continue = false;
  }
 
 //Als er geen sessie is gevonden inlogformulier laten zien
 elseif($_SESSION["user"] != 1)
  {
   echo "$form";
  }
}
 ?>

Door middel van deze code bepaalde ik waar de inlog-/ingelogdvelden zou moeten komen..
PHP:
1
<?php displayInloggen() ?>


Als iemand nog tips heb zijn die ook altijd welkom :)

Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Tipje: Iemand die als gebruikersnaam de string " ' or 1=1;--" of een wachtwoord dat de string " ') or 1=1;--" heeft, is altijd ingelogd. Saneer je inputstrings.
Links:
- http://codeassembly.com/How-to-sanitize-your-php-input/
- http://nl.php.net/manual/en/function.mysql-escape-string.php
- http://nl.php.net/manual/...ql-real-escape-string.php
etc.


Verder zou ik een functie aanmaken die de volledige logincontrole uitvoert en als de gebruiker niet is inlogd, redirect naar een login pagina. Op die manier kan je het altijd includen en bovenaan de pagina kan je een functie check_login(); zetten waardoor altijd gecontroleerd wordt op inloggen. Ongeveer regel 7 -> 61 zouden hier dan in komen te staan (aangepast natuurlijk).

Copy.com


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Sterker nog, wanneer de gebruiker 2 cookies plaatst kan hij zelfs automatisch inloggen als elke gewenste gebruiker. Gewoon zorgen jorkoekje bestaat en userkoekje een sql injection bevat.

Maar je originele vraag: Zorg dat je de daadwerkelijke foutmelding weet. Ergens zul je dus moeten bijhouden wat er fout gaat. Vervolgens zul je die foutmelding ook daadwerkelijk ergens in de buurt van het login form af moeten gaan drukken. Als dit werkelijk je eigen script is dan lijkt het me dat deze twee dingen op zich niet onmogelijk voor je moeten zijn.

[ Voor 49% gewijzigd door Janoz op 29-03-2010 15:52 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het probleem inmiddels opgelost ;)
Danku ;)

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 12:22
haha dit is geen inlogscript, dit is een inbreekscript die je hele database zo op straat gooit!

Niet dat mijn eerste inlogscript er beter uitzag hoor, maar toen ik las wat je allemaal wel niet fout kan doen met zoiets, heb ik toch maar besloten een CMS te zoeken met een ingebouwd inlogscript, ik wil mijn vingers niet aan ditsoort dingen branden!

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 19-09 13:56
Gebruik van de functie empty() is afgeraden. Gebruik hiervoor if($var == '') ipv if(empty($var))

Dit komt omdat de string 1 (één) ook als leeg word gezien.

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17:23
ZeroXT schreef op maandag 29 maart 2010 @ 22:00:
Gebruik van de functie empty() is afgeraden. Gebruik hiervoor if($var == '') ipv if(empty($var))
empty() afgeraden? Wie, wat, waar? In de PHP docs kan ik er niks over vinden, en het is volgens mij ook niet echt algemeen geldend.
ZeroXT schreef op maandag 29 maart 2010 @ 22:00:
Dit komt omdat de string 1 (één) ook als leeg word gezien.
PHP:
1
2
3
4
<?php
$str = '1';
var_dump(empty($str));
?>

geeft als output bool(false). Klopt niet dus. Je bedoelt waarschijnlijk dat de string '0' ook als leeg wordt gezien.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op maandag 29 maart 2010 @ 19:51:
Ik heb het probleem inmiddels opgelost ;)
Danku ;)
Vertel ook even hoe, dan heeft een ander er ook nog iets aan :) Verder hoop ik dat je alle tips van iedereen hebt meegenomen, anders ben je voor je t weet je database kwijt en dat zou zonde zijn.

@ZeroNT: empty() is juist vet handig, ik zou geen reden verzinnen het niet te gebruiken. Er staat duidelijk gedocumenteerd op php.net wanneer deze functie true of false teruggeeft.

[ Voor 20% gewijzigd door Cartman! op 30-03-2010 09:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

nvm

[ Voor 99% gewijzigd door Verwijderd op 30-03-2010 21:58 ]


Acties:
  • 0 Henk 'm!

  • _Noldy
  • Registratie: September 2009
  • Laatst online: 06-07 14:33
Verwijderd schreef op maandag 29 maart 2010 @ 15:32:
Ik heb een probleempje met mijn inlogscript. De bedoeling is dat ik mijn inlogsystem kan includen en kan plaatsen op de plek waar ik dat wil.
Ik zou graag de foutmeldingen boven mijn inlogvelden willen hebben, maar dit wilt maar niet lukken.

Ik ben nog maar een beginnende PHP'er (wat je waarschijnlijk wel zult zien :X ), maar ik zou het wel zo snel mogelijke willen oplossen

Het inlogscript:
<<weggelaten>>
Door middel van deze code bepaalde ik waar de inlog-/ingelogdvelden zou moeten komen..
PHP:
1
<?php displayInloggen() ?>


Als iemand nog tips heb zijn die ook altijd welkom :)
Mijn advies: mysql_real_escape_string() om aan sql injectie te ontkomen.

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
een md5 van een md5 is zinloos. Zorg liever voor een deftige salt.
Pagina: 1