Hey allemaal,

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.

Alvast bedankt!
Groet, Justin Streuper

Ik denk dat ik als eerste een if statement moet maken als er op submit gedrukt wordt met daarin de check of het ip voorkomt in de tabel suspended. Als dit niet het geval is volgt gewoon de rest van het script.


$_SERVER['REQUEST_METHOD']

Voor de rest klopt je idee aardig. Het zal nog wel een hele opgave worden om alles een beetje netjes te programmeren maar dat zal wel lukken.

Waarom wil je dit trouwens?

Waar is die request method voor? die vat ik nog niet helemaal?

Ik ben bezig met het experimenteren in PHP enzo met beveiliging omdat ik merk dat veel scripts die op internet staan gewoon niet de juiste veiligheid bieden, maar soms maar een paar methodes toepassen en niet allemaal zodat je een hele veilige login hebt. EN eigenlijk probeer ik dat nu zelf een beetje in elkaar te vogelen. (hoe bedoel je tijd over en niks nuttigers kunnen bedenken :P) En daarnaast dacht ik dat het ook het bruteforcings probleem tegen gaat aangezien hij maar drie pogingen heeft om te proberen te bruteforcen...

Ik kan trouwens niet echt een heel goed script vinden om een IP adres te achterhalen, is dat niet gewoon zo:


<?php

$ip = $_SERVER["REMOTE_ADDR"];

?>


maar volgens mij is dit wat te simpel :P maar ik hoef in princiepe alleen het IP adres te weten en op te slaan in de database
Dat geeft inderdaad het ip, met $_SERVER['REQUEST_METHOD'] kijk je of er al op de knop gedrukt is
Waar zou ik dat in het script moeten zetten, bij de eerste IF statement?
Hey Justin,

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.


function getip() {
	if (isSet($_SERVER)) {
		if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
			$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
		} elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
			$realip = $_SERVER["HTTP_CLIENT_IP"];
		} else {
			$realip = $_SERVER["REMOTE_ADDR"];
		}

	} else {
		if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
			$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
		} elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
			$realip = getenv( 'HTTP_CLIENT_IP' );
		} else {
			$realip = getenv( 'REMOTE_ADDR' );
		}
	}
	return $realip;
}


$ip = getip();

zal dan het ip plaatsen in $ip.

Verder zou ik gewoon bij elke MISLUKTE poging naar de DB schrijven, wanneer iemand succesvol ingelogd niet. Dan zou ik juist kijken of er al iets in de DB staat, zoja: verwijderen.

ALs er drie keer ingelogd is. Moet je de volgende keer dat iemand inlogd zeggen dat dat niet meer mag. Tenzij de 30min over zijn, dat check je dus pas als de persoon weer wil inloggen. Dus er gebeurt niets automatisch, want de gebruiker triggert het script door weer proberen in te loggen.

Kort en overzichtelijk gezegd:


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
  }
}


Hopelijk snap je het zo, hoe je alles moet doen weet ik om 12 uur ook niet precies :p
Hey Aapjuh!

Bedankt voor de functie die kan ik gewoon bij de functions.php plakken :)!
En het andere wat je beschrijft is denk ik inderdaad wel slim! Dat kan ik dan allemaal in login.php gaan scripten! Helaas heb ik volgende week tentamens dus moet leren maar waarschijnlijk zal ik in het weekend er weer even aan verder gaan! Bedankt iig, jullie hebben me heel erg geholpen :)!
Hey allemaal,

Ik ben alweer wat verder en heb al een deel af van het IP systeem.
zie hieronder:


<?php

if ($exist = mysql_query("SELECT ip FROM suspended")){
	
		if (mysql_num_rows($exist) == 0){
			//Ip adres komt nog niet voor in database
			mysql_query("INSERT INTO suspended (ip) VALUES ('" .$_SERVER['REMOTE_ADDR']. "')");
		
		}else{
			//IP Adres komt wel voor in database, dus update functie om niet nog een keer erin te plaatsen.
				mysql_query("UPDATE suspended SET WHERE ip='" .$_SERVER['REMOTE_ADDR']. "')");

		}
		
}

?>


Graag reacties hoe het beter kan :)


Edit: momenteel alleen IP wat hij invoert in de database, ik werk er nog aan om ook time en count erin te plaatsen :)!
Dit betekend dat er dan bij INSERT INTO blabla nog de eerste tijd en de count op 1 wordt gezet, en bij de UPDATE blabla moet dan de tijd worden bijgewerkt (=overschreven) en de count worden verhoogd :)..
Niemand die er wat leuks over kan zeggen na 48 uur :(?
niet echt een nuttige reactie...

Reageren