Versio

Goed beveiligd inlogsysteem met classen

Een login script dat aardig beveiligd is. Op php hulp heb ik niet van deze beveiligen kunnen vinden bij de scripts, dus ik dacht laat ik die er dan zelf maar opzetten.

Het password wordt gehashed verzonden ( SHA256 ) dus vrijwel onmogelijk om te achterhalen. Verder wordt bruteforcen tegen gegaan d.m.v. een tijdelijk ban system na een x aantal verkeerde inlog pogingen.

En last but not least is het script ook beveiligd tegen session hijacking d.m.v. het bijhouden van ips.

Al deze functies in een aantal classen gegoten, en voila hier staat ie.
Het is geen volledig werkend member systeem, maar wel makkelijk uit te breiden.

De sessies worden in een database bijgehouden.

NB: test.login moet je invullen naar eigen wensen

Veel plezier ermee.

Download links:
Hier
Hier (Mirror)

Gesponsorde koppelingen

BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  

PHP script bestanden

  1. goed-beveiligd-inlogsysteem-met-classen

 

36 reacties op 'Goed beveiligd inlogsysteem met classen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Bo az
Bo az
7 jaar geleden
 
0 +1 -0 -1
Ik heb het niet helemaal door genomen, maar het ziet er aardig uit.
Ik heb alleen wel een paar vraagjes/opmerkingen:
Waarom heb je er voor gekozen om je database class abstract te maken terwijl je gewoon alle methods implementeert?
En waarom extend je vervolgens je ander klassen er op die van een ander type zijn?
Jelmer rrrr
Jelmer rrrr
7 jaar geleden
 
0 +1 -0 -1
Even een principe-kwestie die ik hier verder niet wil bespreken, maar misschien wel eens een topic in de koffiehoek waard is: clsUser is geen clsDatabase, dus naar mijn idee heeft hij niet het recht om die te mogen extenden.

En hij werkt echt niet zonder JS zie ik, dus inloggen vanaf een simpele telefoon of PDA met IE (die doet alsof hij JS aan kan, maar niet verder komt dan document.write) is er echt geen mogelijkheid om in te loggen.

Als ik het goed zie is de sessie alleen verbonden aan het ip-adres van de gebruiker? Dus mensen die via dezelfde proxyserver of gateway (denk aan scholen en bedrijven) delen een sessie?
Pim Vernooij
Pim Vernooij
7 jaar geleden
 
0 +1 -0 -1
Ik ben het eens met Jelmer; je manier van extenden klopt niet. De class User moet een Database instantie bevatten, en niet extenden. Ik vind je naamgeving ook wat vreemd. clsUser, clsDatabase. Waarom niet gewoon User en Database ? je methodes noem je ook niet methMethode().

Dan het proxy/sessie verhaal. Ik zou dat oplossen door een hash te maken en die in een cookie te dumpen. Deze hash sla je in de database op, samen met het IP. Als iemand dan je pagina bezoekt met hetzelfde IP, kan diegene toch niet inloggen omdat hij de hash niet in een cookie heeft staan.
Stien ss
stien ss
7 jaar geleden
 
0 +1 -0 -1
@boaz: die abstracte classe is inderdaad niet nodig, de bedoeling was dat clsDatabase niet geinstantieerd hoeft te worden ( omdat ik toch extend ). Je kan het weghalen, veel nut heeft het ook niet.

@jelmer: Klopt wat je zegt.. Kan je dit dan beter oplossen door een property $db aan de classen die extenden mee te geven en deze te vullen in de constructor?

Wat betreft die ip's, daar had ik zo niet over nagedacht. Ik zal het script wat updaten zodat dit wil mogelijk wordt.

Bedankt voor input
Bo az
Bo az
7 jaar geleden
 
0 +1 -0 -1
@Pim, zet dan meteen even een 'extra' iets in die hash, dan is ie ook niet na te maken.
Edit:
btw wel een goed idee


Edit 2
Ik kom tot de conclusie dat Pim dat bedoelde, ik dacht een hash van het IP. my bad
Jelmer rrrr
Jelmer rrrr
7 jaar geleden
 
0 +1 -0 -1
Gewoon een hash van uniqid() of microtime(). Die is echt niet zomaar na te maken... Zeker niet als je die bij iedere pageview vernieuwd (klinkt vermoeiend, maar kost je maar 1 simpele query per pageview van ingelogde gebruiker meer, en je krijgt er een heleboel veiligheid voor terug)

edit: die instantie van de db zou je via de constructor mee kunnen geven, of je kan gaan kijken naar het registery pattern.
Kees Schepers
kees Schepers
7 jaar geleden
 
0 +1 -0 -1
De functie get_logged_in vind ik een erg kromme benaming! Zou er eerder $user->isLogged() van maken, dan spreekt het namelijk ook bijna voorzich dat hij een boolean terug geeft. Dit geld inprinciepe ook voor de rest van de benamingen.

Goed en professioneel opgezet, maar je moet nog wel wat snijden en passen aan je OO talent ;)
Stien ss
stien ss
7 jaar geleden
 
0 +1 -0 -1
Ik heb die methodes zo benoemd omdat ik het als een soort van property opvat. En dan gebruik is altijd get_property en set_property zeg maar. Ik denk dat ieder zijn eigen manieren daarvoor heeft.

Dank je, wat zou qua OO nog beter kunnen hier? Ik probeer het goed te leren, maar het is vrij lastig..
Rostet
Rostet
7 jaar geleden
 
0 +1 -0 -1
Dit lijk me wel een leuke srcipt voor me site xP
Maar ik snap zelf helemaal niets van php
Dus heeft iemand hier een voorbeeld van van dit goed beveiligd inlogsysteem met classen ?

Zodat ik als die goed en mooi is xP ik hem voor mijn site kan gebruiken (aA)
Vincent
Vincent
7 jaar geleden
 
0 +1 -0 -1
Hij geeft een error bij mij:

Fatal error: Call to undefined function mhash() in C:\server\Apache2\htdocs\login\login\class.clsUser.php on line 252

waar ligt dit aan?
J orii
J orii
7 jaar geleden
 
0 +1 -0 -1
@Vincent
Dan is er iets in je PHP instelling niet goed!

--------------------------
Bij mij geeft ie helemaal geen beeld :S
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Vincent
Vincent
7 jaar geleden
 
0 +1 -0 -1
dan had ik eerst ook moet je test.login instellen en database goed instellen:)
Stien ss
stien ss
7 jaar geleden
 
0 +1 -0 -1
@vincent, je moet in je php.ini voor extension=php_mhash.dll de ; weghalen. Dan werkt het
Martin
martin
6 jaar geleden
 
0 +1 -0 -1
Het script ziet er aardig uit maar er zitten inderdaad foutjes in.
Zo zou ik test.login niet gebruiken aangezien je dat bestadn gewoon kan downloaden en dus zien wat dat je voor login hebt.

Daarnaast is sha.js niet ook niet zo veilig want .js bestanden mag je ook gewoon downloaden of bekijken in je browser.

Verder is het niet onaardig.
Jesse
Jesse
6 jaar geleden
 
0 +1 -0 -1
die kun je beveiligen?
Jeroen
jeroen
6 jaar geleden
 
0 +1 -0 -1
Ik zie verschillende berichten die aangeven dat het een goed, aardig, redelijk script is, maar wel met enige gebreken. Nu ben ik op zoek naar login script met goede beveiliging etc etc.
Dit script wil ik gebruiken voor een site waar prive gegevens van derden op komen te staan. Wie kan en wil mij helpen aan een dergelijk script.
Ik werk met PHP 5 en MySql 5.0 en rechtstreeks op de server van mijn provider die alles ondersteund.

Iemand die mij hiermee kan helpen en eventueel met de implementatie hiervan op mijn site kan (als die dat wil) een percentage krijgen van de verdiensten van deze site.

Reacties kun je zowel hier sturen als rechtstreeks aan a.heijne@chello.nl
Aron
Aron
6 jaar geleden
 
0 +1 -0 -1
Ik krijg in de files Index.php en Register.php een fatale error. Kan dit iets te maken hebben met het feit dat er een Sessionhandler in zit want daar komt hij vandaan?
Jochem
Jochem
6 jaar geleden
 
0 +1 -0 -1
Ik ben nieuw in OO en ik heb een vraagje. Je maakt in je classes gebruik van een getInstance. Wat doet dit precies? Creeert dit feitelijk gewoon een nieuw object? En zorgt dit ervoor dat er maar 1 object tegelijk kan zijn?
Hipska BE
Hipska BE
6 jaar geleden
 
0 +1 -0 -1
Jochem: bekijk even de tutorial "magic methods" daar staat het een beetje uitgelegd
Jochem
Jochem
6 jaar geleden
 
0 +1 -0 -1
ok thanx! Ik heb het bekeken. Moet dan niet de constructor private zijn om te forceren dat ie maar 1x geinstantieerd kan worden?
Youri
Youri
6 jaar geleden
 
0 +1 -0 -1
Fatal error: Insufficient connection parameters given in /home/www.twinrova.com/www/forum_replace/test/class.clsDatabase.php on line 88
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Wouter K
Wouter K
6 jaar geleden
 
0 +1 -0 -1
Dit ga ik even onderhanden nemen is wel een handig idee voor wat ik aan het maken ben zodat al men Members kunnen zien wanneer ze een afspraak hebben en door de beveiliging is alles goed in orde


MVG
Wouter K
Wouter K
6 jaar geleden
 
0 +1 -0 -1
youri je moet een database mken:p

Enkel zoek ik nog hoe :p
Robin
Robin
5 jaar geleden
 
0 +1 -0 -1
ik krijg een ander bericht:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Fatal error: Undefined class name 'clssessionhandler' in z:\easyphp1-8\www\register.php on line 11


't zal wel iets simpels zijn wat ik fout heb gedaan... iemand die weet wat het is?
Ferry
ferry
5 jaar geleden
 
0 +1 -0 -1
Op de een of andere manier doe ik iets fout...

Heb een database aangemaakt, maar krijg nog steets deze melding Fatal error: Insufficient connection parameters given in /data2/virtualhosts/wsvgkus/public_html/beveiliging/class.clsDatabase.php on line 88

Ben nog beginnend in dit gebeuren, dus sorry als het een makkelijke vraag is die je zo kunt oplossen, maar ik kwam er niet uit met mijn geringde kennis.
Karl Karl
Karl Karl
5 jaar geleden
 
0 +1 -0 -1
Gebruik je toevallig voor je database host=localhost, user=root en password='' (niks)?
Dan is dat je probleem kijk maar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
// Alles moet wel zijn ingevuld
            if ( ($this->host == '') || ($this->user == '') || ($this->password == '') || ($this->database == '') ){

Je kunt het volgende stukje: || ($this->password == '') weghalen. Let wel op dat dit weer terug zet als je dit script online gaat gebruiken, vaak heb je dan wel een password.
Arend
arend
5 jaar geleden
 
0 +1 -0 -1
moet je al deze scripts bij htlm editior invullen?
Anthony van zandycke
anthony van zandycke
5 jaar geleden
 
0 +1 -0 -1
huh?

als je nu gwn test.login opent ! dan zie je alles!
Sander
Sander
4 jaar geleden
 
0 +1 -0 -1
@anthony van zandycke

.... Je moet aan het begin van die login.script eerst
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php en aan het einde moet je ?>
neerzetten. Dan sla je hem vervolgens op als een .php bestand.
Als je nu de broncode wil bekijken zul je niks vinden...
Daarom is PHP dus ook een "Server-side HTML embedded scripting language". Dit houdt in dat het gehele script op de host server wordt uitgevoerd. En niet dus zoals JavaScript in de browser.
Raycko
raycko
4 jaar geleden
 
0 +1 -0 -1
huh?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Fatal error: Undefined class name 'clssessionhandler' in /home/vhosts/6thsenseproductions.nl/httpdocs/game/index.php on line 10
TJVB tvb
TJVB tvb
4 jaar geleden
 
0 +1 -0 -1
Dat ziet eruit alsof je include niet klopt. Hij kent de class clssessionhandler namelijk niet.
Raycko
raycko
4 jaar geleden
 
0 +1 -0 -1
ff kijken als ik manual include

werkt niet iemand anders enig idee want dit script wil ik graag gaan testen/gebruiken/aanpassen

kan het misschien liggen aan php versie?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Fatal error: Undefined class name 'clssessionhandler' in /home/vhosts/6thsenseproductions.nl/httpdocs/game/index.php on line 10
Martijn Wieringa
Martijn Wieringa
4 jaar geleden
 
0 +1 -0 -1
Enkele opmerkingen:

Je laat op basis van IP adres een sessie opnieuw starten. Dit is niet wenselijk gezien meerdere mensen hetzelfde IP adres kunnen hebben (als ze achter dezelfde router/proxy zitten).

Je kunt de sessie beter beveiligen tegen 'session hijacking' door het IP adres op te slaan in (bijv.) $_SESSION['user_ip']. Het 'IP adres' dat de sessie start wordt gekoppeld aan de sessie. Als de sessie spontaan vanaf een ander IP adres wordt gevraagt, weet je dat de sessie 'gestolen' is. (Niet fullproof, maar beter dan niets?)

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

if(strcmp($_SESSION['user_ip'], $_SERVER['REMOTE_ADDR']) !== 0)
{

    die('SESSION HIJACKING DETECTED!');
}


?>
Raycko
raycko
4 jaar geleden
 
0 +1 -0 -1
maar dit helpt mij niet egt niemand een idee XD
Raycko
raycko
4 jaar geleden
 
0 +1 -0 -1
helemaal niemand?
Raycko
raycko
4 jaar geleden
 
0 +1 -0 -1
never mind guys moest in de htacces nog zetten dat die .php neemt als php5 plaats van 4 :D maar nu werkt het harstikke goed script

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

  • Details
  • Stien ss
    Door:
    Stien ss
  • 7 jaar geleden
  • 2.790 x bekeken
  • Labels
  • Geen tags toegevoegd.
Get Adobe Flash player