Loginscripts revisited

Door Jan Koehoorn, 21 jaar geleden, 15.256x bekeken

Méér dan alleen een loginscript

Gesponsorde koppelingen

Inhoudsopgave

  1. Alweer een login script?
  2. De loginpagina
  3. Verwerken van de formuliergegevens
  4. Authenticatie
  5. Tot slot

 

Er zijn 140 reacties op 'Beveiliging'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Stefan
Stefan
21 jaar geleden
 
0 +1 -0 -1
Achja, zo kan ie ook ;-)

Goed uitgelegd, al hoe wel ik bij sommige dingen mijzelf toch nog even afvroeg hoe dat nou in elkaar zat. De stijl van PHP'en is toch verschillend. Toch vraag ik mij af, als je op de volgende manier een hash (controlecode toch?) toevoegd aan een cookie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$hash
= rand(300000, 6000000) . "" . str_replace("1", "a", md5($jewachtwoord)) . "site" . date();

?>


En die laat je in een menu checken, en zodra de hash niet meer klopt met wat er in de database staat, dat hij dan de cookies verwijdert en de sessie afbreekt zodat je uitlogt, is dan de hash veilig en kun je dan w?l cookies gebruiken i.c.m. sessies? Lijkt mij wel toch?


21 jaar geleden
 
0 +1 -0 -1
Misschien is een kleine toevoeging tegen sessie kapers op zijn plaats: Sla het IP adres (waarmee word ingelogd) in een sessie variabelen op en deze in authenticatie te controlleren met het huidige ip adres.

Daarnaast zie ik geen problemen met het opslaan van iemands naam in een sessie variabelen. Waarom zal dit gevaarlijk zijn?

Verder top tutorial. zo en dan nu eens de bezem door de script lib halen admins
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Stefan: Cookies zijn per definitie niet veilig. Ze kunnen mij gestolen worden ;-)
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@Webmakerij: sessies kunnen ook gestolen worden, en waarom zou je een username prijsgeven als het niet nodig is?

Bedankt voor je compliment verder :-)
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
Over cookies vs sessies: wat ik niet begrijp, is dat je aangeeft dat cookies niet veilig zijn omdat ze gestolen kunnen worden. Maar om een login met sessies te laten functioneren, MOET er een cookies van en naar de browser gestuurd worden met de SessieID. Dus wat is het verschil in dat opzicht?
Ik begrijp wel dat er verschillen zijn in de manier waarop evt data opgeslagen wordt (in de cookie client side of in de sessie op de server) maar de manier waarop het uitgelegd wordt in de tutorial vindt ik een beetje vreemd, omdat sessies ook gebruik maken van cookies. Die ook gestolen kunnen worden. Waarmee nog steeds een ander op mijn naam kan inloggen en doen wat ik alleen zou moeten kunnen doen.
(wil niet klagen, probeer eea alleen maar te begrijpen/duidelijk te krijgen)
Klaasjan Boven
Klaasjan Boven
21 jaar geleden
 
0 +1 -0 -1
@matthijs voor zoevr ik weet is een cookie is niet nodig. HEt kan ook middels de $_GET methode en de beste methode is via een hidden valaue in een form. Overigens zoekt PHP zelf uit welke van de drie methodes gebruikt wordt. Dit is ondermeer afhankelijk van de instellingen op de pc van de client.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ matthijs: zowel sessions als cookies zijn niet 100% procent veilig. Maar uit mijn tut blijkt dat het niet nodig is om je username en password in een sessie te zetten, dus waarom zou je dat dan doen? Cookies worden inderdaad gezet aan de kant van de client en zijn dus gemakkelijker te manipuleren. Om session hijacking te voorkomen in mijn tut, zou je authenticatie.php kunnen uitbreiden met de volgende code:

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
<?php
    session_start ();

    // anti - session hijacking code
    // geef een eigen map op waar PHP de sessies bewaart
    // deze wel even aanmaken in de root van je site

    ini_set('session.save_path', '../jankoehoorn');
    // verander de naam van de sessie
    ini_set('session.name', 'hash');
    // check op session hijacken
    if (!isset($_SESSION['ip'])) {
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    }

    if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
        // hijacking! doe er iets mee (mail sturen of zo)
    }

    // de gegevens voor de DB connectie
    require '../../../db_config.php';
?>
Donster
Donster
21 jaar geleden
 
0 +1 -0 -1
1. Een sleep gebruiken bij een login is niet zo verstandig ivb met veiligheid ( had daar 'ergens' nog wat over gelezen)
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.

2. Als je een 'bruteforce' wilt stoppen is het beter om het ip in database te zetten , en dat je na bijv 3 foute logins binnen een 'x' aantal minuten het ip banned.

Bruteforce programma's gebruiken een ip/proxy circa 3/4 keer per bruteforce , met een gemiddelde van 120 bruteforces per seconde.
Die proxy's gaan dus heel snel dood op die manier..
Het is ook niet meer zo makkelijk om goede anonieme proxy's te vinden die geschikt zijn voor bruteforcen , de meeste proxy's op grote sites werken niet goed daarmee...
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Donster: okee, goeie tip. Toegevoegd aan de TODO list op pagina 5 van de tut.
Jelmer -
Jelmer -
21 jaar geleden
 
0 +1 -0 -1
Quote:
1. Een sleep gebruiken bij een login is niet zo verstandig ivb met veiligheid ( had daar 'ergens' nog wat over gelezen)
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.

Eerst bewijs, dan pas iemand beschuldigen. In principe is PHP dan totaal bevroren. Geen invoer & geen uitvoer. Als er een veiligheidslek zou moeten zijn, dan zou dat gemaakt moeten zijn door het stuk script dat voor de sleep komt. maar dan nog, dingen als cookies en sessies worden pas actief, 'gecommit' bij het afsluiten van het php-proces.

Daarbij, met een sleep van 3 seconden kan je in theorie maar 20 maal per minuut proberen in te loggen. Daarbij komt nog de verwerkingstijd van de server, de lantency van het op elkaar antwoorden, zo weer 5 seconden weg. Nog maar 17 maal per minuut. Er vanuitgaande dat je de gebruikersnaam al hebt en dat het wachtwoord een beetje fatsoenlijk is: 8 ^ (26(letters) + 26(hoofdletters) + 10(cijfers) + 20(vreemde karakters)) = 82 ^ 8 = 2.0e15... Dat gedeeld door 17 is ongeveer 8.35e10 dagen werk... Het kost minder tijd om gewoon even op zoek te gaan naar het wachtwoord in het slachtoffer zijn boeken, geheugen (social engineering) of achtergrond.

Ik gebruik cookies om te verwijzen naar een regel in mijn database. Bij iedere aanroep wordt die link, een lekkere lange random string van allemaal tekens vervangen door een nieuwe. Zo kan er maar 1 browser tegelijk ingelogd zijn, want als eentje de pagina aanvraagt voor de andere, dan is de unieke string van de andere niet meer gekoppeld aan de regel in de database (die is immers al vernieuwd bij de aanvraag van de ene). De cookie-jatter moet dus zijn nieuwe cookie instellen voordat het potenti?le slachtoffer een andere pagina opvraagt. Daarbij is hij gekoppeld aan een ip-adres (sorry voor iedereen die om de zoveel tijd wisselt van IP)
Donster
Donster
21 jaar geleden
 
0 +1 -0 -1
Dan heb je overigens ook mooi de ip's voor bijv een log-list.

Anyway: denk dat deze tutorial erg nuttig is voor veel mensen!
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Jelmer: kijk, dat is weer een andere invalshoek.
@ Donster: zo is hij ook geschreven; als een opzet die je zelf uit kunt breiden. Het komt nog steeds regelmatig voor dat mensen vragen om een inlogscript. In plaats van ze zomaar een script te laten kopieren hoop ik dat ze wat aan deze tut hebben.
Mebus  Hackintosh
Mebus Hackintosh
21 jaar geleden
 
0 +1 -0 -1
Kijk als ik dan cookie set doe ik dat ook natuurlijk veilig net zoals jelmer ong.

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

$IP
= (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

setcookie(sha1('ip'), sha1($IP), time() + 60*60*24*2); // voor 2 dagen

if(sha1($IP) == $_COOKIE[sha1('ip')]) {

// bak de sessies

} else {

// verwijder de cookie

}

?>


verder een zeer handige tut wat hoop ik onnodige nieuwe niks toevoegende loginscripts weghoud uit de script lib:)

GR. mebus!
Eric Cartman
Eric Cartman
21 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

            WHERE username = '" . $username . "'
            AND    password = SHA1('" . $password . "')
            ";
?>


Waarom sla je de gebruikersnaam ook niet gewoon op met een sha1-hash?

Dat lijkt me n?g veel veiliger.

Je zit dan wel met het probleem, dat je de gebruiker niet kunt begroeten met een gebruikersnaam, maar daar kun je dezelfde methode als PHPhulp voor gebruiken. Gewoon een echte naam laten opgeven en daarmee laten begroeten...

Als je database dan per ongeluk wordt 'gehackt', zijn in ieder geval de gebruikersnamen en wachtwoorden veilig...
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Quote:
Waarom sla je de gebruikersnaam ook niet gewoon op met een sha1-hash?

Een sha1 hash op een goed password lijkt me veilig genoeg. Bovendien offer je een stuk gebruiksvriendelijkheid op als je de originele username niet meer kunt achterhalen. Denk aan users-online scripts en dergelijke.
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
"Maar uit mijn tut blijkt dat het niet nodig is om je username en password in een sessie te zetten, dus waarom zou je dat dan doen?"
@Jan: Dat zeg ik toch ook niet?

Het enige wat ik wilde aangeven is dat 1 van je kopjes heet: "Gebruik geen cookies". Maar bij het gebruik van sessies wordt er net zo goed een cookie naar de browser gestuurd. Anders is het onmogelijk een sessie aan een bepaalde gebruiker te koppelen. Dus ik wilde alleen maar aangeven dat dat kopje verwarrend is/op mij overkomt.

En over het controleren aan de hand van IP adres: er zijn mensen die via ISP internetten waarbij het IP adres om de haverklap verandert (AOL is er 1 van). Dus die mensen maak je het onmogelijk van je site/applicatie gebruik te maken. Het is dus de vraag of je wel naar IP moet kijken.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Matthijs: sessions lijken op cookies, maar als ik zeg: gebruik geen cookies, dan bedoel ik set_cookie enz. Blijkt lijkt mij ook duidelijk uit de alineatekst eronder:
Quote:
Gebruik geen cookies
Zeker, cookies zijn handig. Een gebruiker hoeft niet steeds opnieuw in te loggen. Je kunt bijvoorbeeld een cookie zetten die drie dagen duurt. Dat betekent dus dat iedereen die achter die computer zit drie dagen niet in hoeft te loggen en dus overal bij kan. Bovendien kunnen cookies gestolen worden. Niet doen, dus.
Donster
Donster
21 jaar geleden
 
0 +1 -0 -1
@matthijs
Quote:
En over het controleren aan de hand van IP adres: er zijn mensen die via ISP internetten waarbij het IP adres om de haverklap verandert (AOL is er 1 van). Dus die mensen maak je het onmogelijk van je site/applicatie gebruik te maken. Het is dus de vraag of je wel naar IP moet kijken.


Zodra ze de login button indrukken en na de beveiligde pagina gaan blijft hun ip gewoon hetzelfde.
Het ip verandert aleen als je de internet browser sluit en opnieuw op internet gaat? .. lijkt mij iig!

Het enige nadeel is dat mensen niet ingelogt blijven , als ze hun browser sluiten .. maar kwa login is er niks aan het handje volgens mij...
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
Donster, dat zou inderdaad kunnen. Dan zou het alleen een probleem zijn als je met een cookie en een "remember-me" functie zou werken.

Zoals in het voorbeeld van Mebus?
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
uhm ...

Ben ik heel erg stom als ik vraagt of iemand een .sql kan maken? :$

Ik wil dit systeem graag gebruiken omdat het lekker basic is maar toch goed!

Maar ik kan niet wijs worden van de SQL. Als iemand heel simpel een sql'letje kan maken dan heeeel graag!
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
Jan Koehoorn: ik had de code nog niet goed bekeken. Maar gaat er geen alarmbel rinkelen als je dit
check_login ($_POST['username'], $_POST['password'])
en
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
ziet? Ik hoop dat je dit snel kunt aanpassen voordat mensen dit op een live server gaan gebruiken.
Kalle P
Kalle P
21 jaar geleden
 
0 +1 -0 -1
1.
Quote:
(wil niet klagen, probeer eea alleen maar te begrijpen/duidelijk te krijgen)

Je bent alleen maar aan het zeiken, en nieuwe dingen aan het vinden hoe het wel en zo moet. Dit is grote afstand van het gemiddelde aantal loginsystemen ??n van de betere. Hierbij wordt het ook nog wel uitgelegd

2.
Denk dat je meer moet verdiepen in PHP
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
//...
if (isset ($_POST['username'], $_POST['password'])) {
    check_login ($_POST['username'], $_POST['password']);
//...
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
    function check_login ($username, $password) {

        $sql = "
            SELECT id
            FROM members
            WHERE username = '"
. $username . "'
            AND    password = SHA1('"
. $password . "')
            "
;
//...
?>

Kortom, de functie wordt aangeroepen.
En de POST wordt gezet in de variabelen $username en $password van de functie.
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
Kalle, jammer dat het zo overkomt. Dat is niet mijn bedoeling. Een beetje gezond kritisch naar een stukje code kijken mag toch wel? Denk dat iedereen daar wat van leert. Mocht ik een fout maken in een reactie, dan wijst iemand anders mij daar wel weer op. Prima. No hard feelings, en excuses als iemand zich beklaagd heeftgevoeld door mijn reacties.

Verder nog even over het andere punt: de code functioneert wel, daar heb je gelijk in. Maar zoals de code nu is is het script kwetsbaar voor sql-injectie. De $username en password worden niet ge-escaped. Ofwel je script met als doel ongeauthoriseerden buiten te houden wordt door de eerste de beste scriptkiddie gekraakt.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Bescherming tegen mysql injection staat op de todo lijst.


21 jaar geleden
 
0 +1 -0 -1
Offtopic:
Het ip adres kan alleen gewijzigd worden als je je opnieuw aanmeld op het ADSL/Kabel/Internet netwerk. De server van je provider wijst je dan een IP adres aan. Dit gebeurt bijvoorbeeld als je je modem aan-uit-zet. Sommige providers laten IP adressen hetzelfde.
Als je IP adres tijdens een 'internet sessie' in het algemeen zomaar zou veranderen zou de server niet meer weten aan wie hij de pagina pakketjes moest sturen, dan zou de ene zomaar een pakketje van iemand anders ontvangen. Lijkt me niet erg handig.
Hipska BE
Hipska BE
21 jaar geleden
 
0 +1 -0 -1
idd, dat dacht ik er ook zo over.. anti-mysql-injection Kalle, en niet altijd meteen kritiek ofzo geven op anderen hun reactie!
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Aanvulling: Bescherming tegen MySQL injection was er al voor een deel, omdat ik de vars binnen de queries buiten quotes had. Nog even mysql_real_escape_string eroverheen en klaar ben je. Ik wacht even af tot de tips een beetje uitgerateld zijn, dan verwerk ik ze allemaal in ??n keer. Tot zover alvast bedankt voor de bijdragen.
Raymen
Raymen
21 jaar geleden
 
0 +1 -0 -1
kan je misschien ook nog de sql code erbij zetten? :)
Legolas
Legolas
21 jaar geleden
 
0 +1 -0 -1
Het meest veilige is dan uiteindelijk zelf je eigen sessie systeem bakken en dan zet je wel cookies en de minimale nodige data in je db
Bo az
Bo az
21 jaar geleden
 
0 +1 -0 -1
@Legolas, het jammere daarvan is dat een client dan cookies moet toestaan. Het mooie van sessies is dat er op allemoglijke manieren geprobeerd wordt het sessie id mee te geven; cookie, post, get.
Legolas
Legolas
21 jaar geleden
 
0 +1 -0 -1
dat kun je er zelf toch aan toevoegen?

EDIT: kijken of cookies ondersteunt worden etc wordt je html ook niet snel verkloot door php
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Quote:
uhm ...

Ben ik heel erg stom als ik vraagt of iemand een .sql kan maken? :$

Ik wil dit systeem graag gebruiken omdat het lekker basic is maar toch goed!

Maar ik kan niet wijs worden van de SQL. Als iemand heel simpel een sql'letje kan maken dan heeeel graag!

De tabel ziet er heel simpel uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
CREATE TABLE members (
  id int(11) NOT NULL auto_increment,
  username varchar(64) NOT NULL default '',
  password varchar(64) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Alfred -
Alfred -
21 jaar geleden
 
0 +1 -0 -1
Quote:
Het ip adres kan alleen gewijzigd worden als je je opnieuw aanmeld op het ADSL/Kabel/Internet netwerk.


Of je hebt zoals mij, elke 36u prijs. Na 36u wordt de verbinding automatisch gereset voor 'n ander ip.

Verder vind ik het een hele mooie uitleg Jan!
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
Na het inloggen krijg ik de volgende melding op secure_page.php:

Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23

Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23

Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24

Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24

Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26

Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26

Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php:23) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 10

Gezien de melding 'headers already sent' dacht ik dat je 'ob_start ();' was vergeten. Klein foutje verder niets aan de hand dacht ik. Maar als ik in authenticatie.php ob_start(); toevoeg aan het script dan moet ik opnieuw inloggen en als ik op inloggen klik gebeurd er niets meer ... althans hij gaat laden en komt op dezelfde pagina terug. index.php dus!

Wat kan er fout zitten? Iemand enig idee?
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Rafael: bedankt :-)

@ Jurgen: Er gaat blijkbaar iets fout met het connecten met je DB. In mijn voorbeeld include ik ergens db_config.php

Daar moet je je eigen bestand voor in de plaats zetten met de goede connectgegevens. Het zou ook kunnen dat je PHP versie de functie mysql_real_escape_string nog niet ondersteunt. In dat geval gebruik je addslashes er voor in de plaats.

Dat headers already sent komt doordat er een foutmelding op het scherm komt. In principe moet die ob_start niet nodig zijn, want het script heeft nergens output.
Matthijs
matthijs
21 jaar geleden
 
0 +1 -0 -1
Die foutmeldingen betekenen dat er geen verbinding is met de database. Dus misschien is een van de gegevens niet juist ingevuld (in je dp_config bestand). Heb je getest of die wel functioneert?

De headers already sent melding komt weer door de foutmelding die veroorzaakt is door de eerdere errors. Die zijn immers al verstuurd.
Edit:
jan was me voor
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
Ik gebruik dit script als zijnde db_config.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$dbhost
= 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';
?>


Dit script gebruik ik voor meerdere scripts en daar werkt het gewoon
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
Ik heb mysql_real_escape_string vervangen door addslashes en nu zijn een paar foutmeldingen verdwenen. Nu heb ik nog over:

Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20

Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php:20) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 10

Regel 20 bij mij:

if ($res = mysql_query ($sql)) {
Donster
Donster
21 jaar geleden
 
0 +1 -0 -1
Ik zie je nergens een verbinding maken ..

Doe dit eens:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$dbhost
= 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';

$db = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
mysql_select_db($dbname, $db) or die (mysql_error());
?>
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
Oke dit werkt gelukkig wel ;) Maar nu is er alweer een volgend probleem.

Als ik inlog gaat ie even laden maar hij blijft op dezelfde pagina. (index.php)

In mijn authenticatie bestand heb ik

function to_login () {
sleep (3);
header ('Location: http://www.****.nl/cms/logins/'); // NIET VERGETEN AAN TE PASSEN!!!

Die wijst gewoon naar het index bestand ... zit daar een fout of is het toch iets anders?
Bastiaan
Bastiaan
21 jaar geleden
 
0 +1 -0 -1
@Jurgen: Heb je al een username en een (gehasht) password in je database staan?
@Jan Koehoorn: Mijn complimenten voor deze fraaie tutorial. Weer erg helder en leerzaam!
Zero Dead
Zero Dead
21 jaar geleden
 
0 +1 -0 -1
@ matthijs(& Webmakerij) over AOL:

AOL gebruikers hun IP adres verandert eens iedere .(.) minu(u)t(en), EN/OF na iedere submit. Dit kan voor AOL omdat hun ip range heel groot is!

USA:
NetRange: 172.128.0.0 - 172.191.255.255
191-128=63 * 255 * 255 = 4.096.575
UK:
inetnum: 195.93.0.0 - 195.93.63.255
63 * 255 = 16.065

60 / 2 = (simpel) 30

16065(AOL UK) / 30 / 24(uur) = 22.3125 (dagen dat je 24 uur/dag online bent, zonder dat je IP langer dan 2 minuten hetzelfde hoeft te zijn/is)

Wat ik heb gehoord, openen deze AOL gebruikers een site via een speciaal AOL-browser. Als zij het zouden openen met IE, FF, Opera, verzin maar wat, zouden ze het normaal kunnen bezoeken(of in ieder geval, langer dan normaal). (na een aantal klachten, dat als iemand inlogt direct terug gestuurt word na de login pagina, heb ik deze tip gegeven, en verder nooit meer iets van gehoord)

---------------------------------------

Over sessies:

Deze kunnen alleen verandert worden, of uitgelezen, via de webserver, heeft iemand geen toegang daartoe, hoe wil die dan een sessie veranderen/uitlezen?

---------------------------------------

Wat ik gebruik in login systeem, is het volgende:

Een gebruiker logt in met een gebruikersnaam, en wachtwoord. Deze gebruiker kan dan ook selecteren of hij/zij de sessie IP beveiliging wilt inschakelen, of juist niet, door een hokje aan te klikken/kruisen(automatisch is dit hokje aangekruist). Hier staat een vette ! bij die aangeeft dat ze het alleen moeten uitschakelen wanneer ze direct na het inloggen, of een kleine tijd later, terug geschopt worden na de login pagina. Is dit hokje ge de-selecteerd(dus, als word aangegeven dat het IP niet gecontroleert moet worden) word er een nieuwe sessies geopent, die dan weer aangeeft dat hij vooral NIET het IP moet beveiligen.

Omdat maar 1 op de 100 gebruikers deze optie uitschakelt, zal een hacker snel stoppen, want die denkt dat hij niks met alles sessies kan, er een perfecte beveiliging op zit, of wat dan ook(ervan uitgaand dat deze niks weet van de PHP-codes).

Voorbeeld login:

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

include("../include_bestand.php");

if(isset($_SESSION['id'])) { // als gebruikers is ingelogt, deze uitloggen voor veiligheid, en tegen fouten
    session_destroy(); // verwijder dan de sessie
    header("Refresh: 0;"); // Zorg dat de include geen gegevens terug stuurt door te refreshen
    exit; // stop met script
}

if(isset($_POST['login'],$_POST['pass'])) {

    /* login check of gebruiker bestaat(en al het andere) voer het volgende uit bij succes: */
        $_SESSION['id'] = $me[0]; // $me->id bij mysql_fetch_object
        $_SESSION['IP'] = $_SERVER['REMOTE_ADDR']; // geen uitgebreide controle, omdat het dan juist fout kan gaan

        if(isset($_POST['ipcheck']) AND $_POST['ipcheck'] == 1)
            $_SESSION['ipcheck'] = true;
        else
            $_SESSION['ipcheck'] = false;

        header("Location: index.php");

        echo "<a href='./index.php'>Logged in, now redirecting, if your page doesn't redirect, please click here.</a>";
        exit;
    /* else - als foute login, kijk waarom, account niet actief? account verbannen? etc? echo dat dan! */

}

?>

<b>Login</b>
Genbruikersnaam: <input type="text" name="login">
Wachtwoord: <input type="text" name="pass">
IP Controle: <a href="javascript:alert('Als je niet kan inloggen, omdat je daarna direct weer word uitgelogt, de-selecteer dan aub deze knop. Als het normaal werkt met deze knop geselecteert, word het zeer aangeraden deze knop geselecteerd te houden!');">[!]</a> <input type="checkbox" name="ipcheck" value="1" checked>


Voorbeeld include(ik zou er een functie van maken, maar dit is wat makkelijker als 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
<?php

session_start();

if(isset($_SESSION['id'],$_SESSION['IP'],$_SESSION['ipcheck'])) {

    if($_SESSION['ipcheck'] AND $_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
        session_destroy();
        header("Location: login.php");
        exit;
    }
else {
        /* queries die ECHT nodig zijn */
        $logged_in = 1;
    }

}
else {
    header("Location: login.php");
    exit;
}


?>


---------------------------------------

Beetje off-topic:

@ Donster: als iemand dan toch nog een PHP code kan invoegen kan deze heel makkelijk je wachtwoord uitlezen, gebruik dit:

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
$dbhost
= 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';

$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());

unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);

?>


Edit:
Bericht geoptimaliseert, en MySQL verbinding wat bezoeker-vvreidelijker gemaakt...
Jurgen B
Jurgen B
21 jaar geleden
 
0 +1 -0 -1
Het probleem was inderdaad dat ik mn wachtwoord niet ge-hashed had ... Nu werkt het super! dankuu
Lia Steeman
Lia Steeman
21 jaar geleden
 
0 +1 -0 -1
Prima script. Werkt als een trein. Solide basis om verder uit te breiden.
Bedankt van een beginnende php-programmeur (m/v).
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Lia: dankjewel :-)
Erwin
Erwin
21 jaar geleden
 
0 +1 -0 -1
Ik krijg de volgende foutmelding als ik met een niet in de Db bestaande user inlog:

Warning: Cannot modify header information - headers already sent by (output started at C:\webs\test\db_config.php:15) in C:\webs\test\authenticatie.php on line 25

Als ik inlog met een in de Db aanwezige user gaat het inloggen wel goed. Ik heb alles geinstalleerd zoals in de tutorial aangegeven.
Iemand enig idee wat er fout is ? Alvast bedankt.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Erwin: net even online getest op http://www.jankoehoorn.nl/tuts/php/login/ en daar gaat het prima. Als je het script overneemt, let er dan op dat er niets naar de browser geschreven wordt voordat die header verstuurd wordt.
Erwin
Erwin
21 jaar geleden
 
0 +1 -0 -1
@ Jan Koehoorn: Hij werkt inmiddels. Er zat blijkbaar nog een witregel in db_config.php. Bedankt voor de heldere tutorial, het is een mooie basis om mee verder te gaan.
Martijn Roverts
Martijn Roverts
21 jaar geleden
 
0 +1 -0 -1
Kan iemand mij vertellen waarom die witregel nu de een foutmelding geeft?
Ik had namelijk ook hetzelfde probleem als Erwin.
Twan van de Moosdijk
Twan van de Moosdijk
21 jaar geleden
 
0 +1 -0 -1
ik wil nu op de secure_page.php het session[id] gegeven gebruiken (tenminste... ik wil de id vna de gebruiker die ingelogt is gebruiken) maar dit lukt me niet...
kan iemand me misschien zeggen hoe dit moet? ik heb het op veel manieren geprobeert zoals:
echo $_SESSION['id'];
ik heb het ook op verschillende plaatsen geprobeert maar dit werkt allemaal niet. Wat doe ik verkeerd?
Zero Dead
Zero Dead
21 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

session_start();
echo $_SESSION['id'];

?>


Dat moet werken:)
Twan van de Moosdijk
Twan van de Moosdijk
21 jaar geleden
 
0 +1 -0 -1
Je bedoelt die code gewoon simpelweg in de secure_page.php neerzetten? dit doet namelijk helemaal niets.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Quote:
Kan iemand mij vertellen waarom die witregel nu de een foutmelding geeft?
Ik had namelijk ook hetzelfde probleem als Erwin.

Een witregel is ook output. Het kan zelfs een spatie zijn. Elke vorm van output veroorzaakt problemen voor session_start.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Quote:
Twan van de Moosdijk schreef op 01.09.2006 14:43:
Je bedoelt die code gewoon simpelweg in de secure_page.php neerzetten? dit doet namelijk helemaal niets.

Ergens op secure_page.php dit neerzetten en kijken wat eruit rolt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    if (isset ($_SESSION)) {
        print_r ($_SESSION);
    }

?>
Lissy Pixel
Lissy Pixel
21 jaar geleden
 
0 +1 -0 -1
@ Jan : ik heb vandaag deze tut is goed doorgenomen en wederom een 10+ als je het mij vraagt. Doe je precies wat de tut voorsteld komt alles goed en heb je een fantastisch inlog/membersysteem.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Lissy: te gek, dankje :-))
Robert Deiman
Robert Deiman
21 jaar geleden
 
0 +1 -0 -1
Leuke tut om te lezen, en het werkt prima. Nog wel een kleine aanpassing die op zijn plaats is denk ik: Het lijkt me verstandiger om de kolom usernames Unique te maken. Het lijkt me erg onlogisch dat er 2 gebruikers kunnen zijn met eenzelfde gebruikersnaam.
Dat was het eigenlijk wel :)
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Robert: klopt. Op de pagina Tot slot zeg ik dat ook al. Mijn voorkeur gaat uit naar een combi van username en password, dan zit je nog wat veiliger.
Zap
zap
21 jaar geleden
 
0 +1 -0 -1
Ik snap het nog niet helemaal, hoe kun je zorgen dat er een pagina alleen gezien kan worden door users die zijn ingelogd?

Want die secure page werkt niet helemaal goed bij mij, als ik namelijk toch naar die pagina zonder in te loggen krijg ik deze errors:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/gamereac/public_html/uploads/test/secure_page.php:2) in /home/gamereac/public_html/uploads/test/authenticatie.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home/gamereac/public_html/uploads/test/secure_page.php:2) in /home/gamereac/public_html/uploads/test/authenticatie.php on line 11


en daaronder krijg ik gewoon de pagina te zien, en ik heb alles gewoon zo overgenomen als in de tut.
m.v.g. zap
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Heb je je eigen db_config.php goed ingesteld? Kloppende username en password voor je database? Zorg ook dat er absoluut niets naar het scherm ge?choot wordt in db_config.php.
Zap
zap
21 jaar geleden
 
0 +1 -0 -1
Ik maak gebruik van een config file:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$dbhost
= 'localhost';
$dbuser = '%%%';
$dbpass = '$$$';
$dbname = '***';
?>


en van een opendb:
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
<?php
$db
= mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());

unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>



en dit is dan mijn authenticatie.php :


<?php
    // de gegevens voor de DB connectie
        require 'config/config.php';
        require 'config/opendb.php';
    
    // terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
    function to_login () {
        sleep (3);
        header ('Location: http://uploads.gamereactor.biz/test');  // NIET VERGETEN AAN TE PASSEN!!!
    }
[
/code]

(
dit is alleen het bovenste gedeelte van de script)

m.v.g. zap
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Ik mis de functie session_start() in je het begin van authenticatie.php
Zap
zap
21 jaar geleden
 
0 +1 -0 -1
lol, dom van mij... bedankt :)
maar er waren ook nog wat andere dingen zoals spaces achter ?> .
Maar nu doet hij het bedankt :)
en moet ik nu gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
require 'authenticatie.php';

op een pagina die alleen ingelode mensen mogen zien?

m.v.g.
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ zap: correct :-)
Rene Koot
Rene Koot
21 jaar geleden
 
0 +1 -0 -1
Een fraaie tutorial waar ik net op zat te wachten. Alleen nog een vraag. Als je inlogt met een verkeerde naam/wachtwoord wordt je teruggestuurd naar de inlogpagina. Kan hier dan ook een melding gegeven worden als: verkeerd wachtwoord ingevuld
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Rene: natuurlijk kun je dat doen. Bij een foutieve combinatie username/password zou je een sessievariabele kunnen zetten, laten we zeggen $_SESSION['error'].

Aan het begin van de inlogpagina wordt de sessie vernietigd. Vlak daarvoor zou je dan moeten checken of $_SESSION['error'] bestaat. Zo ja, dan kopieer je hem in een variabele, zodat je verder op de pagina een melding kunt geven.
Maikel
maikel
21 jaar geleden
 
0 +1 -0 -1
Is er ook een admin script zonder db
PHP Newbie
PHP Newbie
21 jaar geleden
 
0 +1 -0 -1
Dit is een INLOGSYSTEEM dat is iets anders dan wat jij bedoeld met je admin systeem.

Ga nu eerst is gewoon even een paar php tutorialtjes doorlezen, zodat je een beetje weet wat php is.

Ga dan zelf aan de slag en open een topic waarin je je vragen stelt.
Rene Koot
Rene Koot
21 jaar geleden
 
0 +1 -0 -1
@Jan: bedankt, na wat testen kan ik nu inderdaad een melding weergeven op het scherm. Ga er de volgende dagen even verder mee stoeien (moet vooral nog letten op taalgebruik, heb jaren lang in Clipper geprogrammeerd gaat net anders he ;-)
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Rene: Clipper, dat is nog eens naam uit het verleden :-)
Ik lees trouwens op WikiPedia dat de taal nog steeds gebruikt wordt.

Ontopic: mooi dat je het aan de praat hebt gekregen en dat je iets aan mijn tut hebt gehad.
Rene Koot
Rene Koot
21 jaar geleden
 
0 +1 -0 -1
@Jan: Wat oud maar goed is moet je niet weggooien (Clipper dus). Overigens gebruik ik het nu samen met MiniGui, Harbour en Borland C++ compiler. Kun je met een oude taal toch mooi Windows programma's maken. Kijk maar eens op www.plantenkennis.com/download.php en installeer het hier aangeboden programma. (Als je tenminste iets met planten doet).

Overigens: nu wil ik de gebruiker het verschil aangeven als ze helemaal niet ingelogd zijn (dus b.v. als ze de pagina secure_page.php opvragen) en als ze een verkeerde inlognaam hebben ingevuld. Kan dat ook
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Rene: als ze een verkeerde combi username/password invullen zou je dat op kunnen vangen door de functie check_login als volgt aan te passen:
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
    function check_login ($username, $password) {
        $sql = "
            SELECT id
            FROM members
            WHERE username = '"
. $username . "'
            AND    password = SHA1('"
. $password . "')
            "
;
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) == 1) {
                $row = mysql_fetch_assoc ($res);
                $_SESSION['id'] = $row['id'];
                $_SESSION['logged_in'] = true;
            }

            else {
                // sessievariabele zitten om op de loginpagina een melding te kunnen geven
                $_SESSION['error'] = '<p>Verkeerde username en/of password</p>';
                to_login ();
            }
        }

        else {
            to_login ();
        }
    }

?>

Op de pagina met het loginformulier zou je dan eerst met isset moeten checken of $_SESSION['error'] gezet is en die in een andere variabele kopieren voordat je session_destroy aanroept. Verderop in de inlogpagina kun je dan weer een boodschap geven aan de user.
Rens nvt
Rens nvt
21 jaar geleden
 
0 +1 -0 -1
@Jan, ik gebruik zelf eenzelfde principe in mijn loginscripts. En mijn ervaring is dat het goed werkt!

Naar mijn idee denk ik echter iets gevonden te hebben tegen het "stelen van sessies", maar weet niet helemaal zeker of het "waterdicht" is.
Ik sla een sha1 hash van $_SERVER["REMOTE_ADDR"] + session_id() op in de database, en check elke keer bij het laden van de pagina ook of deze waarde nog klopt.
Zo niet, dan laat ik uitloggen.

Is dit mogelijk een aanvulling op jouw script, of levert dit slechts valse hoop op veiligheid?
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ Rens: op het eerste gezicht kan ik zo niet zeggen of het waterdicht is. Ik zie parallellen met mijn reactie van 21.08.2006 10:14. Wat daar extra gebeurt, is dat de naam van de sessie en de map waar de sessiegegevens bewaard worden, veranderd worden.

Een ip kun je volgens mij spoofen dus dat is niet per definitie veilig. Hoe dat met een session_id zit, zou ik zo uit mijn hoofd niet weten.
Legolas
Legolas
21 jaar geleden
 
0 +1 -0 -1
een IP spoofen kan, maar is niet echt makkelijk, werkt alleen als je echt veel low-level kennis hebt, en dan ook echt low-level. tevens moet je het te spoofen ip uit de lucht halen en moet je goed kunnen gokken hoe de server reageert, want dat gaat naar de juist ontvanger...
Katjan
katjan
21 jaar geleden
 
0 +1 -0 -1
ok: even om een misverstand de wereld uit te helpen: sessies zijn NIET uit te lezen van buitenaf, tenzij de gebruiker file access heeft tot de server, en in dat geval kan hij ook in de database..
sessies zijn dus, zolang je het ip maar aan een sessie koppelt, veilig genoeg!
Wim
Wim
21 jaar geleden
 
0 +1 -0 -1
Misschien wil iemand mij het volgende uitleggen:

Boven aan het bestand authenticatie.php staat session_start();

Als ik het goed begrepen heb, include je dit bestand voor iedere pagina die je wilt beveiligen.

In de PHP manual staat:
session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.

Dat houdt toch in dat iedere keer dat authenticatie.php wordt aangeroepen er een nieuwe sessie wordt aangemaakt? Terwijl toch de bedoeling is dat je wilt controleren of de betreffende gebruiker en sessie bij elkaar horen?

Of heb ik het nu verkeerd begrepen?
Ron
Ron
21 jaar geleden
 
0 +1 -0 -1
Ik krijg bij het invullen van de inloggegevens de melding "er is een fout opgetreden". Wat kan er in het autorisatiebestand fout zijn ? Overigens ben ik nog maar net bezig met PHP (in include staan mijn databasegegevens). De site is nog niet aktief.


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
<?php
    session_start ();

    // de gegevens voor de DB connectie
    include ("verbinding.php");
    
    // terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
    function to_login () {
        sleep (3);
        header ('Location: http://www.worldlywise.info/login/');  // NIET VERGETEN AAN TE PASSEN!!!
    }
    
    function
check_login ($username, $password) {
        // query opstellen
        // je tabel kan er heel simpel uitzien:
        // id INT(11) auto_increment
        // username VARCHAR 30.
        // password VARCHAR 10. Het password sla je op in je DB met een SHA1 hash
        // daarom staat SHA1 dus ook in de query

        $sql = "
            SELECT Id
            FROM ron
            WHERE username = '"
. mysql_real_escape_string ($username) . "'
            AND password = SHA1('"
. mysql_real_escape_string ($password) . "')
            "
;
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) == 1) {
                // de query is gelukt en we hebben 1 resultaat
                $row = mysql_fetch_assoc ($res);
                $_SESSION['id'] = $row['id'];
                $_SESSION['logged_in'] = true;
            }

            else {
                to_login ();
            }
        }

        else {
            to_login ();
        }
    }

    
    // eerst maar eens kijken of $_SESSION['logged_in'] bestaat
    if (!isset ($_SESSION['logged_in'])) {
        // nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
        if (isset ($_POST['username'], $_POST['password'])) {
            check_login ($_POST['username'], $_POST['password']);
        }

        else {
            to_login ();
        }
    }

?>
Robert -
Robert -
21 jaar geleden
 
0 +1 -0 -1
Mooi scriptje.
Maar even een vraagje voor het toepassen ervan.
Als ik bij een administratie pagina een pagina heb die andere pagina's include moet ik dan in zowel de hoofdpagina en in de includes
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
require 'authenticatie';
?>
toevoegen voor het geval iemand direct naar de includes wil linken, of kan dit anders opgelost worden?
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Hoi Robert,

in dat geval kun je het beste require_once gebruiken in al je bestanden.
Robert -
Robert -
21 jaar geleden
 
0 +1 -0 -1
Ok dankjewel Jan, dan kan ik weer verder :)
Erik
Erik
20 jaar geleden
 
0 +1 -0 -1
Ik heb dit script met succes weten toe te passen, alleen wanneer ik vanaf de secured_page naar een volgende secured_page ga via een link(bijvoorbeeld secured_page2.php die precies hetzelfde is als secured_page.php), dan kom ik weer opnieuw op de inlogpagina.

Doe ik wat verkeerd of kan dat gewoon niet?
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
Hoi Erik,

klopt, die bug heb ik af en toe ook. Ik ga er even naar kijken.

groeten, Jan
Erik
Erik
20 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (!isset ($_SESSION['logged_in']))


Als ik dit verander in:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($SESSION['logged_in'] == true)


Dan doet tie het wel, maar is dit veilig genoeg?
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
Ja, lijkt me wel. Ik zal het vanavond even testen.
Harry
Harry
20 jaar geleden
 
0 +1 -0 -1
Hallo Jan,

Ik ontdek net je tut en reakties... hier kan ik veel van leren!!!

Vraag:
// anti - session hijacking code
ini_set('session.save_path', '/temp');

geeft geen sessions files in de root dir temp. Zie ik iets over het hoofd?

Maar...
Wat heeft het voor nut om de ingestelde sessions dir te wijzigen naar een eigen dir op de server?

Bedankt, Harry
Manuel de Groot
Manuel de Groot
20 jaar geleden
 
0 +1 -0 -1
He Jan,

Heb een paar uur zitten studeren op een auth script uit een boek. Krijg de logica niet tussen de oren en het script niet aan de praat. Toen maar authenticatie.php gezocht op google. Deze tut is erg leerzaam (mede door de "levendige" reacties). Ik zal de veren maar achterwegen laten...

Zag in mijn tmp map dat er een sessie bestand van 17kb werd gemaakt en 1 met de daadwerkelijke inloggegevens. Iemand een idee wat je met de data in dit eerste bestand kunt?

Manuel
Yordi B
Yordi B
20 jaar geleden
 
0 +1 -0 -1
sorry voor eht bericht op een oude tutorial maar ik stuit op een probleem
ik gebruik de zelfde toepassing als Jan ook doet dus precies het zelfde
maar hij haalt sessie's door elkaar denk ik
als ik ingelogd ben en iemand anders logt in komt die op mijn account

het is exact hetzelfde behalve wat er gebeurt na het inloggen
ik laat hierna een query uitvoeren met het ID uit de session
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
<?
$id2
= $_SESSION['id'];


$query2 =  mysql_query("SELECT * FROM members WHERE id='$id2'");
    
while ($row2 = mysql_fetch_assoc($query2))
{

$id      = $row2['id'];
$email = $row2['email'];
$ras    = $row2['type'];
$level = $row2['level'];
}

?>


weet iemand het probleem of zou mij kunnen helpen
mvg
Chango911
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Wouter\Bureaublad\wamp\www\Loginscripts\db_config.php:8) in C:\Documents and Settings\Wouter\Bureaublad\wamp\www\Loginscripts\authenticatie.php on line 10


Iemand die me kan helpen -> ik kan ook inloggen zonder gegevens :)
Gebruiker PHP
Gebruiker PHP
20 jaar geleden
 
0 +1 -0 -1
Hierbij nog een reactie, misschien wat laat maargoed

Citaat: "Gebruik geen cookies"
Ik vindt dit onzin, cookies kunnen net zo veilig zijn als sessies. Je moet bij zowel cookies als sessies goed opletten wat je doet. Nooit gevoelige informatie opslaan op de computer van de bezoeker, denk hierbij aan gebruikersnamen en eventueel gecodeerde wachtwoorden.

Een voorbeeldje van hoe ik het opbouw:
- De inlogprocedure is beveiligd, dit betekend dat elke inlogpoging gelogd wordt. Na 3x foutief inloggen wordt de inlogfunctie voor 15 minuten geblokkeerd.

- Als de inlogpoging gelukt is dan begin ik met een code te genereren van 50 tekens lang met [a-z][A-Z][0-9]. Die sla ik op in de database, samen met het IP, de host en de useragent. Daarna sla ik de code op in een sessie of cookie. Omdat ik alles in de database opsla is session / cookie hijacking vrijwel onmogelijk.

- Daarna wordt bij elk bezoek de code geupdate in de database en de cookie / sessie.


Dus "Gebruik geen cookies" lijkt mij onzin.
Mark Dijkstra
mark Dijkstra
20 jaar geleden
 
0 +1 -0 -1
he leuk scriptje maar het werkt niet zoals het moet werken bij mij want ik kan met een foutje wachtwoord/username gewoon door naar de beveiligde pagina en als ik uit log kan ik gewoon weer naar de pagina toe zonder weer op nieuw in te loggen ik heb prcs de code van de tut over genomen iemand eenig idee ?
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
@ mark: het werkt wel zoals het moet werken hoor. Waarschijnlijk ben je op de beveiligde pagina vergeten het bestand 'authenticatie.php' te requiren.
Mark Dijkstra
mark Dijkstra
20 jaar geleden
 
0 +1 -0 -1
nope heb alles prcs zoals wat je hier hebt neer gezet gedaan,niks vergeten en ook niks extra toe gevoegt
Jan Koehoorn
Jan Koehoorn
20 jaar geleden
 
0 +1 -0 -1
Geef eens een stukje code van een beveiligde pagina?
Dag Geeraert
Dag Geeraert
20 jaar geleden
 
0 +1 -0 -1
Kan iemand eens een samenvatting maken?
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
Wat zijn de logingegevens ?


20 jaar geleden
 
0 +1 -0 -1
Quote:
wouter schreef op 11.12.2007 18:48
Wat zijn de logingegevens ?

Als je de code hebt bekeken, heb je kunnen zien dat het gebruik maakt van een mysql db. Die database moet je zelf aanmaken. Je moet dus zelf nog de gebruikers aanmaken.
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
@ Jeej : als jij de code hebt bezien heb je gezien dat er geen registratie bij zit.

Waar voer ik het dan in


20 jaar geleden
 
0 +1 -0 -1
In bijvoorbeeld phpmyadmin, oid.
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
en juist waar :)
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
jan is online :p help aub jan ;p
Thijs X
Thijs X
20 jaar geleden
 
0 +1 -0 -1
@ Wouter,
Je hebt vast wel ergens een Admin panel van je website waar je PHPmyAdmin kan vinden. Als je het niet kan vinden mail dan even naar je provider om te vragen waar je het kan vinden en dan voer je daar de nieuwe records in toe.
Wouter K
Wouter K
20 jaar geleden
 
0 +1 -0 -1
hehe thijs ,
dit probleem is opgelost,

Ik werk nu nog een error weg

en ik ben niet de baas van die host !


20 jaar geleden
 
0 +1 -0 -1
En dat probleem is nu ook opgelost. Check je interne berichten.
Mitch
Mitch
19 jaar geleden
 
0 +1 -0 -1
Kan je dan ook je login name op halen door middel van
$data->login ?
Roos
Roos
19 jaar geleden
 
0 +1 -0 -1
Wat is nu precies de oplossing van deze melding, die ik al een paar keer hier heb voorbij zien komen?

Warning: Cannot modify header information - headers already sent by (output started at /usr/home/xxx/domains/xxx.nl/public_html/test/login/db_config.php:8) in /usr/home/xxx/domains/xxx.nl/public_html/test/login/authenticatie.php on line 10
Roos
Roos
19 jaar geleden
 
0 +1 -0 -1
Dat snap ik even niet, ik heb het bestand rechtstreeks overgenomen van de tutorial, dus de index.php en niets veranderd.

Zit het dan hier in? Zo ja kun je dat toelichten want ik begrijp niet wat encoding inhoudt.
Quote:
Wanneer je de error krijgt en werkelijk niets voor de functie hebt staan, dan kan dit liggen aan de encoding van je bestand. Copy/paste je code in kladblok (notepad), sla het bestand op en upload het. Wat je ook kan doen is in je texteditor bij encoding (conversion in ultraedit waar dit zich wel eens voordoet) UTF-8 to ASCI te kiezen. Hiermee los je het probleem ook op.
Jan Koehoorn
Jan Koehoorn
19 jaar geleden
 
0 +1 -0 -1
Hoi Roos,

je zou op index.php de bovenste drie regels code even kunnen weghalen om te kijken of daar het probleem zit.
Omar M
Omar M
19 jaar geleden
 
0 +1 -0 -1
Hallo

In mijn boek hebben ze het ook over sessions. Maar toch gebruiken vele toch nog cookies. Waarom dan? En ik ben nog een n00b wat zijn de SQL tabellen? Aangezien deze er wel moeten zijn.

Alvast bedankt

MVG,
OmarM
Joren de Wit
Joren de Wit
19 jaar geleden
 
0 +1 -0 -1
Cookies in een loginsysteem worden voornamelijk gebruikt om te zorgen dat een gebruiker ingelogd kan blijven. Op die manier hoef je als je later terug komt op de site niet opnieuw in te loggen...
Rene
rene
19 jaar geleden
 
0 +1 -0 -1
ik vind hem wel goed werken
alllen er stond geen uitleg bij voor database te maken
en zou graag een registratie pagina en een w8woord vergeten er bij
Fiero
Fiero
19 jaar geleden
 
0 +1 -0 -1
De termen uit deze tutorial zijn nog net ff te moeilijk om te volgen..
Ik ken alleen het makkelijkste van php dus niet al die functies enzo.
Verder wel overzichtelijk misschien kom ik later nog eens kijken!

Bedankt!
Rogier Burton
Rogier Burton
19 jaar geleden
 
0 +1 -0 -1
Da's grappig! Ik kan zonder in te loggen mijn secure_page.php bekijken!
Chikie
Chikie
19 jaar geleden
 
0 +1 -0 -1
Als ik als user1 inlog en van een beveiligde pagina naar een twede beveiligde pagina ga, ben ik ineens ingelogd als user2... of andersom dan...
Zal niet aan het script liggen maar aan mij want ik heb hetzelde probleem met andere login scripts ook al gehad... (of ik ze nou aanpas of 1:1 overneem). Ik weet het niet meer..... iemand anders wel ?? Please !!
Dutch Caffeine
Dutch Caffeine
19 jaar geleden
 
0 +1 -0 -1
Zou ik de mysql logs mogen?

Ik kan dan zo het wachtwoord pakken.

NOOIT IN JE MySQL query een md5 of sha1 functie gebruiken, doe dat met php!!!

Dat zal een stuk veiliger zijn.
Chikie
Chikie
19 jaar geleden
 
0 +1 -0 -1
Daar kan het wat mij betreft niet aan liggen, dat had ik al veranderd...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//...
if (isset ($_POST['username'], $_POST['password'])) {
            check_login ($_POST['username'], md5($_POST['password']));

//...
 function check_login ($username, $password) {

$sql = "SELECT id, actief FROM members WHERE nickname='$username' AND wachtwoord ='$password'";

//...
?>
Niekos
Niekos
18 jaar geleden
 
0 +1 -0 -1
Beste,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($res = mysql_query ($sql)) {


Waar slaat dit op als ik vragen mag? Dit is toch geen goede code want binnen een if statement moet toch altijd een voorwaarde staan? Dus >, <, != of == en geen enkel = teken? Of heb ik dit mis?
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
Het is een kortere manier om dit te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $res
= mysql_query ($sql);
    if ($res) {
    
    }

?>

Binnen een if hoeft niet speciaal een voorwaarde met >, <, != of == te staan. Alles wat false of true oplevert kun je in een if zetten. Dit mag bijvoorbeeld ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $test
= true;
    if ($test) {
    
    }

?>

Bovenstaande code zal zo niet letterlijk voorkomen natuurlijk, maar is om het duidelijk te maken. Een functie die false of true retourneert mag je ook in een if zetten.
Ditmar
Ditmar
18 jaar geleden
 
0 +1 -0 -1
Aller eerst hartstikke bedankt voor deze tut. hij werkt fantastisch.
Waarschijnlijk een hele late reactie, maar vroeg het met toch af.

Ik gebruik je script met veel plezier, alleen heb ik een vraag.
Op mijn site wil ik dit systeem gebruiken om via 1 page voor iedereen in te loggen. Maar dat wel elke persoon naar een andere pagina word gestuurd.

Klein voorbeeld:

----------------------------------------
| id | username | password | site |
-----------------------------------------
| 1 | user1 | pass1 | site1 |
-----------------------------------------
| 2 | user2 | pass2 | site 2|
-----------------------------------------

Als ik dus als User1 inlog dat ik op site1 kom en met user2 op site2.
Is deze mogelijkheid er?
Ben zelf aardige leek met mysql en php verwerkingen.

Alvast hartelijk bedankt.
mvg, Ditmar
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
Hoi Ditmar,

dit is al een vrij oud script van me en tegenwoordig doe ik het alweer wat anders. Wat jij wilt is wel te doen, maar misschien moet je eerst even duidelijk uitleggen waarom je dit zo wilt?
Ditmar
Ditmar
18 jaar geleden
 
0 +1 -0 -1
De reden hiertoe is dat ik voor mensen bij mij op de opleiding portfolio's online laat zetten.
Maar omdat we onderling onze werken eigenlijk niet willen delen behalve bij het laten zien aan de leraren zocht ik naar een login pagina die dan vanuit daar de juiste user naar zijn of haar subdomein als portfolio stuurt om daar bijv. te oploaden of zijn werk te laten zien.

mvg, Dimtar
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
Okee, maar standaard werken sessions niet op subdomains. Daarvoor moet je even deze pagina lezen:
http://www.madcarrot.co.uk/2005/08/pass_sessions_b.html

Bovendien vraag ik me wel af of dit veilig is. Als ik het subdomein van iemand anders in de adresbalk intik, zit ik er gewoon in volgens mij.

Ik denk dat je beter het user id in de sessie kunt zetten en vervolgens alleen maar dingen uit je db laten rollen die aan dit user id gekoppeld zijn.
Ditmar
Ditmar
18 jaar geleden
 
0 +1 -0 -1
ja dat ga ik dan maar proberen.
Alsnog hartstikke bedankt voor de moeite.

greetz
Marc FS
Marc FS
18 jaar geleden
 
0 +1 -0 -1
Er ontgaat mij iets.
Ik kan nu op 'login.php' inloggen met elke willekeurige gebruikersnaam en wachtwoord die ik maar invoer, niet alleen met de gebruikersnamen en wachtwoorden in de tabel 'members'.
Dus ook als ik als gebruikersnaam 'dssd' invul en als wachtwoord 'sdsdfa' kom ik op secure_page.php, met bovenaan de 'headers already sent'-mededeling en daaronder de mededeling dat ik succesvol ben ingelogd. Dit is uiteraard niet de bedoeling. Wat mis ik hier?
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
In dit script zit geen code om uit te loggen. Als je dus 1 keer goed bent ingelogd en je zit nog in dezelfde sessie, kun je daarna overal mee inloggen.
Kay
Kay
18 jaar geleden
 
0 +1 -0 -1
Ik heb op de server een database en een tabel gemaakt. Alleen krijg ik steeds de fout:

"Can't connect to local MySQL server through socket '/tmp/mysql.sock"

Ik heb al wat rond gezocht maar ik kom er niet uit. Kan iemand me verder helpen?
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
@ Kay: ja, maar dan moeten we wel een stukje script zien.
Kay
Kay
18 jaar geleden
 
0 +1 -0 -1
Voor de inlog en authenticatie heb ik hetzelfde gebruikt als in de tutorial beschreven staat. Voor het config bestand heb ik een stukje script gebruikt uit de reacties.

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
$dbhost
= 'localhost';
$dbuser = 'x';
$dbpass = 'x';
$dbname = 'members';

$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());

unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);

?>


ik heb een database aangemaakt en de gegevens, zoals in het commentaar in het authenticatie bestand staat aangegeven, ingevoerd.

Ik heb contact opgenomen met de host en gevraagd waar mysql.sock staat. Maar zij zijn erg traag in het beantwoorden van vragen.
Kay
Kay
18 jaar geleden
 
0 +1 -0 -1
Het is ondertussen gelukt, ze hebben me verteld dat ik het ip adres van de server i.p.v. 'localhost' moest gebruiken. Nu heb ik nog steeds een aantal fouten waar ik niet uitkom.

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 7

en ik kan inloggen zonder gegevens in te voeren.

Ik heb gelezen dat 'session_start()' iets verstuurd naar de browser, ik heb nog niets kunnen vinden om dit op te lossen, of beter gezegd: de gevonden oplossingen hiervoor werkten niet.


Ik had in Crimson Editor de 'encoding type' op UTF-8 gezet. Dacht dat dit zou werken, maar helaas. Nu heb ik het via kladblok gedaan, en werkt perfect!
Julien
Julien
18 jaar geleden
 
0 +1 -0 -1
Toevallig kom ik net uit een les PHP op school, en de docent weet me te vertellen dat je niks aan "session_destroy ();" hebt omdat de session gewoon blijft bestaan. Hij gebruikte de term "deprecated".

Kun je niet in ieder geval gewoon de waarde van 'logged_in' op false zetten?
Jan Koehoorn
Jan Koehoorn
18 jaar geleden
 
0 +1 -0 -1
Dit script is al weer twee jaar oud, dus bear with me ;-)

Het is inderdaad handiger om een sessievariabele bij te houden die je al naar gelang op true of false zet.
Julien
Julien
18 jaar geleden
 
0 +1 -0 -1
:-) Een vraagje dan ter informatie voor mij (ben php lerende): ik gebruik dit scriptje voor op mijn cms'je, maar als het twee jaar oud is, is het dan nog wel veilig?

En hoe koppel ik terug aan de gebruiker dat de gebruikersnaam niet klopt?

Bedankt!
Stefan Kuipers
Stefan Kuipers
17 jaar geleden
 
0 +1 -0 -1
ik heb alles proberen te lezen en te volgen, maar miss stel ik toch een dubbele vraag. (Mijn excuses hiervoor ,maar door concentratie problemen kom ik er soms niet uit)

een vraag die ik heb is:
Als ik dit script zou gebruiken, waar kan ik dan zien wie er is ingelogd. in de zin van. In de database bewaar ik namelijk gegevens die ik wil gebruiken bij functies in beschermde omgeving, maar dan moet ik dus altijd dus kunnen zien welke gebruiker er precies is ingelogd.

Wie zou mij opweg kunnen helpen?
Niels K
Niels K
17 jaar geleden
 
0 +1 -0 -1
Wat je zou kunnen doen als ze inloggen de sessie's naar de database schrijven. met bijvoorbeeld een begin tijd: en een eindtijd. Bij inloggen vul je begin tijd en bij uitloggen de eindtijd. Degene die de eindtijd nog niet heeft gevuld is ingelogd. Wat wel het probleem is, als hij niet op de uitlog button klik maar de browser sluit, is hij voor altijd online.
Stefan Kuipers
Stefan Kuipers
17 jaar geleden
 
0 +1 -0 -1
maar kan ik niet ook sessieid toevoegen aan database.. en dan bij uitloggen of verlaten browser een script uit te laten voeren dat sessieid weer wordt gewist (Mijn IngBank gebruikt ook zoiets bij telebanking bij uitloggen opend er een venster die nodige dingen opruimd en afsluit).

Ik weet niet of er iets is als een live check 'sessieid is afgesloten' en dan gewoon sessieid veld leeg maken in members database?
Stefan Kuipers
Stefan Kuipers
17 jaar geleden
 
0 +1 -0 -1
lees ik net zit er geen uitlog module in., hoe krijg je dat gefixed.

Ik d8 gebruik deze tut en bouw m later uit. Maar ik snap er soms echt niks meer van. pff.. nu nog vanuit een andere loginsysteem bouwen is miss best lastig. Is er nergens een geheel basis werkende loginsysteem database gestuurd waarin de basis werkt en grotendeels veilig is? (miss had ik dit betr niet kunne vragen (A))
Niels K
Niels K
17 jaar geleden
 
0 +1 -0 -1
je kan gewoon in je query session_id() implementeren. Dat schrijft hij het sessie id in de database weg..
Stefan Kuipers
Stefan Kuipers
17 jaar geleden
 
0 +1 -0 -1
dat was ik ondertussen al van plan. Heb ff een dagje gechilled na alle programmeer stress. Morgen weer aan de gang. Ben bezig met een werkbriefjes/uren registratiesysteem.. voor bijv. een uitzendbureau.. als het een beetje werkt dan zet ik m op de site. Maar dat later.. :) thanks!
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Stefan Kuipers
Stefan Kuipers
17 jaar geleden
 
0 +1 -0 -1
ah ik zit stom te doen.. sessionID is gewoon id van de user in membersdatabase. Dus dan is het geen probleem om bij de data te komen.

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

Inhoudsopgave

  1. Alweer een login script?
  2. De loginpagina
  3. Verwerken van de formuliergegevens
  4. Authenticatie
  5. Tot slot

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

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.