Inlog systeem

Door Jan Haesen, 12 jaar geleden, 15.341x bekeken


Dit script is een voorbeeld van hoe het niet moet, gebruik bijvoorbeeld het volgende script: klik of het volgende: klik
[/modedit]
Naar aanleiding van het maken van een CMS heb ik ook een inlogsysteem gemaakt. Vrijwel onmisbaar. Mocht iemand zich afvragen waarom het in het Engels is, dat heb ik gedaan omdat ik dat een fijnere taal vindt om mee te werken, en is wat algemener. Hierdoor is dit ook te gebruiken door buitenlanders.

Wat toelichting:

Je hebt de inlogpagina, hier vandaag heb je de links, een is voor het registreren en de ander voor het inloggen zelf.

De registratie pagina, hier moet men een username en password invullen, dit laatste 2 keer om te kijken of ze wel het goede wachtwoord hebben. Twee dezelfde usernames zijn niet toegestaan, dit wordt dan ook aangegeven door het script. Na registreren wordt het password gecodeerd en kan dus niet bekeken worden door de Admin, hierdoor voorkom je ongewenst veranderen van wachtwoord door anderen als zij dit kraken.

Een beveiligde pagina, hier kunnen alleen leden opkomen, als iemand op deze pagina probeert te komen zonder account wordt hij terugverwezen naar de inlog pagina.

Natuurlijk is alles wat in dit script staat aan te passen, je kan eigen tabellen eromheen zetten. Je kan het achtergronden geven of wat dan ook. Verbouw het naar harte lust.

Gesponsorde koppelingen

PHP script bestanden

  1. inlog-systeem

 

Er zijn 20 reacties op 'Inlog systeem'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Hipska BE
Hipska BE
12 jaar geleden
 
0 +1 -0 -1
Versie 5 en hoger?

Ik durf te wedden dat hij in versie 6 ZEKER niet zal werken!!
Overigens zie ik ook niets php5 specifiek. Integendeel, het meeste is php4 specifiek.

Verder zit ik ook met de bedenking waarom het handig zou zijn om op elke pagina de database gegevens in te moeten vullen? Enig voordeel tegenover dit op 1 plaats te doen?
- SanThe -
- SanThe -
12 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Bij voorbaat waarschuw ik alvast dat als je een foutmelding die als volgt luidt:

Warning: Cannot modify header information - headers already sent by (output started at.......

Dat verhelp je dan toch zelf even.

Script is lek => SQL-Injection.
$Vars horen buiten quotes.
Arwin  vdv
Arwin vdv
12 jaar geleden
 
0 +1 -0 -1
Zie hier voor een phpversie 5+ zonder SQL Injection optie:):
http://www.phphulp.nl/php/scripts/8/1721/
Roel -
Roel -
12 jaar geleden
 
0 +1 -0 -1
Cookies? Liever niet :-(
- Ariën -
- Ariën -
12 jaar geleden
 
0 +1 -0 -1
Hoezo gene cookies? Ook met Cookies kan je het vrij veilig maken. Geen vitale gegevens in een cookie pleuren. Dus GEEN passwords, en ook geen rechten of levels (die ik enkele keren in een criminal-game tegen kwam :-D.).

Een userID, en een MD5-hash welke beiden ook in de database staan kan je prima gebruiken, met als optie om de inlogessie ook te koppelen aan een IP. Als iemand dan de cookie jat.. dan ben je alsnog niet ingelogd.
Jan Haesen
Jan Haesen
12 jaar geleden
 
0 +1 -0 -1
@SanThe ik moet heel eerlijk zeggen dat ik nog niet met Injection bezig ben geweest doordat ik pas vrij kort geleden ben begonnen, dit is pas me 2de script. En wat bedoel je precies met de vars buiten quotes? En dat oplossen is wat moeilijk uit te leggen aangezien bepaalde mensen ook dit willen verwerken in een lay-out en dus in de body willen gebruiken. Dat is wat ik heb gedaan.

@Hoithebest waarom geen cookies? Ik vindt het prima werken, maar ja ben zelf pas bezig sinds een week of 4 of zo. In dit script krijgt de user een id en de md5 hash. Dat van die IP is nog wel een goeie Aar! Ik zal is kijken wat ik daar mee kan doen.

@Hipska ik weet het, ik had eigenlijk gewoon include('config.php'); moeten doen. Maar niet echt aan gedacht ;)
Hendel Berg
Hendel Berg
12 jaar geleden
 
0 +1 -0 -1
Inhoudelijk naar de code heb ik niet zozeer gekeken. Wat me opvalt is de onduidelijkheid van de code en fouten in de syntax. Dus, tip: ga je allereerst verdiepen in de syntax van php. Leer jezelf ook aan om duidelijke code te schrijven, door witruimte te gebruiken en bijv. instellingen te centraliseren. Tutorials die je hier wellicht kunnen helpen:
http://www.phphulp.nl/php/tutorials/8/271/
http://www.phphulp.nl/php/tutorials/8/575/

Voorbeeld:
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
/* db_config.inc.php */
<?php
$host
= "localhost";      // Locatie databaseserver
$database_name = "****";  // Naam van de database
$username = "****";       // Gebruikersnaam
$password = "****";       // Wachtwoord

mysql_connect($host, $username, $password) or die("Error on line ". __LINE__ .": ". mysql_error());
mysql_select_db($database_name) or die("Error on line ". __LINE__ .": ". mysql_error());
?>



/* registreer.php */
<?php
require('db_config.inc.php');

$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT password FROM users WHERE username = '". $username ."'");

list($id, $username, $password) = mysql_fetch_row($check);

if (isset($_COOKIE['ID_my_site']) && $pass == $password)
{

   header("Location: members.php");
}

else
{
?>


<html>

<head>
   <title>Registreer</title>
</head>

<body>
   Registreer pagina:

<?php
   if (isset($_POST['submit']))
   {

      if (!$_POST['username'] || !$_POST['pass'] || !$_POST['pass2'])
      {

         echo 'You did not complete all of the required fields';
      }


      if (!get_magic_quotes_gpc())
      {

         $_POST['username'] = addslashes($_POST['username']);
      }


      $check = mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '". $_POST['username'] ."'"));

      if ($check != 0)
      {

         echo 'Sorry, the username '. $_POST['username'] .' is already in use.';
      }


      if ($_POST['pass'] != $_POST['pass2'])
      {

         echo 'Your passwords did not match.';
      }


      $_POST['pass'] = md5($_POST['pass']);

      if (!get_magic_quotes_gpc())
      {

         $_POST['pass'] = addslashes($_POST['pass']);
         $_POST['username'] = addslashes($_POST['username']);
      }


      mysql_query(INSERT INTO users (username, password) VALUES ('". $_POST['username'] ."', '". $_POST['pass'] ."'));
?>


<h1>Registered</h1>
<p>Thank you, you have registered - you may now login.</p>

<?php
   }
   else
   {
?>


   <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
      <table border="0">
         <tr>
            <td>Username:</td>
            <td><input type="text" name="username" maxlength="60"></td>
         </tr>
         <tr>
            <td>Password:</td>
            <td><input type="password" name="pass" maxlength="10"></td>
         </tr>
         <tr>
            <td>Confirm Password:</td>
            <td><input type="password" name="pass2" maxlength="10"></td>
         </tr>
         <tr>
            <td colspan="2"><input type="submit" name="submit" value="Register"></td>
         </tr>
      </table>
   </form>
</body>

</html>

<?php
   }
}

?>
Stefan
Stefan
12 jaar geleden
 
0 +1 -0 -1
Nog een lekje:

<form action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $_SERVER['PHP_SELF']?>
" method="post">

http://www.mc2design.com/blog/php_self-safe-alternatives
Jan Haesen
Jan Haesen
12 jaar geleden
 
0 +1 -0 -1
Fouten in de syntax ben je me kwijt, en bij de schrijfwijze van het script, vindt ik op deze manier juist fijn. Ik kan gelijk zien wat ik fout heb gedaan. Ieder zijn eigen manier toch? Wat fouten betreft, volgens mij zit er geen een in, ik heb alles gecontroleerd. Dit is trouwens ook niet op precies dezelfde manier gebruikt door mij. Op mijn website heb ik wel tabs en dat soort dingen.
Stefan
Stefan
12 jaar geleden
 
0 +1 -0 -1
Zitten toch nog wat foutjes in. Je zet gewoon html in de PHP tags. Zonder echo of iets dergelijks. Dat gaat zeker fouten geven.

Ook moet je niet gaan controleren of je submit button word gezet.
if($_SERVER['REQUEST_METHOD'] == 'POST') {

} else {

}
Jan Haesen
Jan Haesen
12 jaar geleden
 
0 +1 -0 -1
@Stefan waar doe ik dat dan precies, want volgens mij ga ik elke keer uit php voor html en er dan weer later in. En volgens mij is dit niet fout? En hoe zou ik anders moeten kijken of me knop is ingedrukt?
Stefan
Stefan
12 jaar geleden
 
0 +1 -0 -1
Ik zag toch echt html tags in een Php stuk.

$_SERVER['REQUEST_METHOD'] == 'POST' is wat je moet kijken of er een form is gesubmit.
Hendel Berg
Hendel Berg
12 jaar geleden
 
0 +1 -0 -1
Het is de bedoeling dat we op hier, op PHPhulp, iets aan je script hebben, daarom post je het toch? Nu is het hier onleesbaar omdat er hier geen tabs te zien zijn. Dat deze tabs op jouw website wel te zien zijn, hebben we hier niets aan.
Quote:
Bij voorbaat waarschuw ik alvast dat als je een foutmelding die als volgt luidt:

Warning: Cannot modify header information - headers already sent by (output started at.......
en vervolgens schrijf je:
Quote:
Wat fouten betreft, volgens mij zit er geen een in, ik heb alles gecontroleerd.
Hoe kun je een foutmelding krijgen als er geen fouten in zitten?? De eerste drie fouten zitten al in het eerste stuk van je script. Daar vergeet je namelijk het eerste if-blok, het while-blok en het else-blok af te sluiten.
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
<?php
// Connects to your Database
mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error());
mysql_select_db("Database_Name") or die(mysql_error());

//Checks if there is a login cookie
if(isset($_COOKIE['ID_my_site']))

//if there is, it logs you in and directes you to the members page
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{

if ($pass != $info['password'])
{
}

else
{
header("Location: members.php");
?>

<html>
<head>
</head>
<body>
</body>
</html>
Jens erd
Jens erd
12 jaar geleden
 
0 +1 -0 -1
Je hebt in dat script helemaal geen while lus nodig, je kunt het gewoon zo oplossen:

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
<?php
// Connects to your Database
mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error());
mysql_select_db("Database_Name") or die(mysql_error());

//Checks if there is a login cookie
if(isset($_COOKIE['ID_my_site']))

//if there is, it logs you in and directes you to the members page
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '". $username."' AND password = '".$pass."'")or die(mysql_error());

$num = mysql_num_rows($check); // gewoon rijen tellen.
if($num == 1) {
header("Location: members.php");
}

?>

<html>
<head>
</head>
<body>
</body>
</html>
Jan Haesen
Jan Haesen
12 jaar geleden
 
0 +1 -0 -1
Jullie vergeten dat dat eerst script een voorbeeld is en niet het daadwerkelijke waarvoor het gepost is. En ik heb dat neergezet omdat je het script kan verwerken in je layout. Hierdoor zul je uit de php gaan en aan het eind er weer in. Sommige mensen zullen dit in hun body plakken en dan gaat het fout!
Rob
Rob
12 jaar geleden
 
0 +1 -0 -1
Dit is zo verschirkkelijk slecht!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '". $username."' AND password = '".$pass."'")or die(mysql_error());

SQL Injection?
Caren de vries
caren de vries
10 jaar geleden
 
0 +1 -1 -1
ik snap het niet, moet je nog iets aan die code veranderen of niet?
Jordi Kroon
Jordi Kroon
10 jaar geleden
 
1 +1 -0 -1
gebruik een ander script dit script is waardeloos en verouderd
Maarten PHP
Maarten PHP
10 jaar geleden
 
0 +1 -0 -1
Zo deze script poster is ook nog eigenwijs
deze code is bagger
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Karl Karl
Karl Karl
10 jaar geleden
 
0 +1 -0 -1
@PHPer PHPer: Nuttig dat je dat post. Je maakt zelf ook bagger zooi. Dat login gedoe van jou slaat ook nergens op.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. inlog-systeem

Labels

Navigatie

 
 

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.