Ik ben pas een half jaartje bezig met PHP en heb nu enige ervaring opgedaan. Maar ik had een vraag betreffende een inlogsysteem wat ik aan het opzetten ben. Ik wil graag een functie erin toevoegen dat als je na 3 inlogpogingen niet de juiste combinatie van username en password hebt weten in te voeren dat dan je account voor 30 minuten geblokkeerd wordt.
Alleen ik heb echt geen idee hoe ik zo'n functie op moet bouwen. Heeft iemand hier ervaring mee of weet iemand een tutorial want via google kan ik niks vinden qua tuts of scripts waar het in voorkomt.
NB, ik draai nog op een oudere versie van php, namelijk 4.4.4.
ik zie dat je al functie's kunt gebruiken. Hier heb ik een iets beter ip getter voor je. Heb het hier ergens op phphulp gevonden.
...
Eigenlijk is die niet zoveel beter. Het enige wat ik nu hoef te doen om jouw een fout ip te geven is mijn browser zo instellen dat hij een header genaamd X-Forwarded-For meestuurt. Minder werk dan een proxy op internet zoeken, en ideaal om te faken dat je iemand anders bent. REMOTE_ADDR kan je daarentegen niet aanpassen. Dat is of je eigen (buiten) ip-adres, of dat van een proxy, maar nooit dat van een al in gebruik door iemand anders genomen ip-adres.
Naar mijn idee is $_SERVER['REMOTE_ADDR'] een betere keuze dan de functie die Aapjuh gaf :)
Ja en buiten dat leek de functie ook heel ingewikkeld en wist ik niet precies wat het voor extra's toevoegde aan de actie $_SERVER['REMOTE_ADDR']. Daarom heb ik ook voor deze methode gekozen. Jammergenoeg deze week tentamens dus heb weinig tijd om aan het script verder te werken, maargoed, na vrijdag weer genoeg tijd :D!
Bankorganisaties als Postbank enz. doen het ook, mede omdat het brutoforcing tegen gaat. En daarnaast wordt je tijdelijk geband, en niet voor altijd, wat is 20 á 30 minuten nou in een mensenleven? ;-).. En buiten dat wil ik wel eens kijken hoe ik zoiets moet maken enzo, dus het is een leerschool en nuttig :-)!
<?php
if ($exist = mysql_query("SELECT ip FROM suspended WHERE ip='".$_SERVER['REMOTE_ADDR']."'")){
if (mysql_num_rows($exist) == 0){
//Ip adres komt nog niet voor in database
mysql_query("INSERT INTO suspended (ip,time,count) VALUES ('" .$_SERVER['REMOTE_ADDR']. "', '".date(H.i.s)."', '1')");
}else{
//IP Adres komt wel voor in database, dus update functie om niet nog een keer erin te plaatsen.
mysql_query("UPDATE suspended SET count=count+1, time='".date(H.i.s)."' WHERE ip='" .$_SERVER['REMOTE_ADDR']. "'");
}
}
?>
Maar hoe moet ik nu verder?
Er moet nu zegmaar gekeken worden naar of de count 3 is, zoja, check of de 30 minuten voorbij zijn -> ja, delete record -> nee, geef echo met hoeveel minuten er nog over zijn.
is de count == 0
laat login formulier zien
is count meer dan 0>
Laat aantal pogingen zien die over zijn
dus zo:
<?php
if -> kijken of de persoon al 3 keer heeft geprobeerd == true {
if -> kijk of 30min al om zijn == true
{
Ga naar :login
} else {
Geef een error dat hij niet in mag loggen door teveel pogingen.
}
} else {
if -> Kijk of de gegevens correct zijn == true
{
log in en reset de DB gegevens van het desbetreffende IP
} else {
sla een foutieve login op in de DB met de huidige tijd
}
}
?>