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
sla een ip op in je db.

vb:

TABLE pogingen
-IP
-AANTAL
-TIJD

doe je het fout, dan komt je ip in deze tabel te staan.
elke keer dat je dan weer fouten ingeeft, gaat het aantal met 1 omhoog.

en als het op 3 staat ben je geblockt.
in het van 'tijd' geef je dan aan hoe lang.

Mocht je dan 1 keer fout doen per ongeluk maar de 2de keer is juist, dan verwijder je gewoon die rij uit de tabel.
Dus dan werkt je database in principe dynamisch samen met de pagina.
Even kijken of ik het goed begrijp.

Inlogpoging 1:

1. Schrijft de IP eerst weg bij de eerste inlogpoging
2. Stuurt met een hidden field een +1 bericht naar de database in het veld AANTAL
3. Stuurt een timestamp mee?
4. Stuurt de te bannen tijd mee.

ik heb 3x foutief ingelogd, de database voegt IP toe aan geblokeerden lijst?
maar hoe zorg ik er dan voor dat dit IP weer wordt verwijderd na een bepaalde tijd?
inderdaad...

om de regel te verwijderen roep je gewoon de data op en als de tijd verstreken is, verwijder je hem.
@Justin

Wat je doet is het volgende:

- Je logt foutief in
- Je schrijft het ip van de gebruiker en de tijd dat er fout is ingevuld naar de database
- Bij een volgende inlogpoging (laten we zeggen binnen 10 minuten) waarbij de gebruiker met hetzelfde ip weer het wachtwoord fout invult pas je de tijd weer aan.

Staat aantal op 3 en is de tijd waarop de laatste keer foutief een wachtwoord is ingevuld dan controleer je hoe lang dat geleden is. (tip TIMEDIFF) Is dat meer dan een halfuur, begin je opnieuw met tellen en werk je de tijd weer bij. Is dat nog geen halfuur geleden dan geef je een melding dat ze een halfuur moeten wachten en pas je de tijd NIET aan.
Ja dat snap ik, maar hoe doe ik dit automatisch, het aanroepen zegmaar.

Ik dacht dat het ook zo kon:
In de tabel users 7 kolommen (even simpele versie)

ID
USERNAME
PASSWORD
IP
AANTAL (pogingen)
TIJD
BLOCK (0 of 1, 0= niet geblockt, 1=wel geblockt)

Als er na 3x foutief is ingelogd = echo bericht met u kunt de komende 15 minuten niet inloggen.

Dan vervolgend de IP invullen, aantal pogingen staat dan op 3, tijd is gewoon een timestamp en in je script doe je dan een if lus met daarin als de 15 minuten zijn verstreken de kolommen ip, aantal, tijd wissen en block veranderen naar 0 zodat er weer kan worden ingelogd.

en dan de else, weer een echo met hoeveel minuten er nog over zijn.

Is dit een heel omslachtige methode?
indien je het zo doet blokkeer je een user!
stel dat ik wil inloggen op jou account en ik doe het 3 maal foutief, dan wordt jou account geblokkeerd en kan ik je lekker pesten.
Dat is waar, even niet bij stilgestaan. Moet ik dan een aparte user tabel gebruiken met daarin alleen IP, AANTAL en TIJD?

Ik ga vanavond wat proberen in elkaar te scripten en post het hier als review en voor commentaar :)! Alvast bedankt!
ja dat is het beste lijkt me...;-)
Hoi allemaal, ik heb nu de benodigde bestanden bij elkaar en ben bij het punt aangekomen dat ik ergens de functie moet gaan implementeren, ik heb alleen geen idee hoe te beginnen.

Ik maak gebruik van 5 bestanden en 1 database met 2 tabellen.
De een is tabel Users, hierin staat opgenomen ID, username, password
en de ander is Suspended, hierin is opgenomen IP, AANTAL, TIJD.

Momenteel werkend voorbeeld hier te zien: http://www.visual-masters.nl/login/index.php

index.php

<?php

include 'functions.php';

?>

<html>
<head>
<title>Login Example</title>
</head>

<body>

<?php

show_loginbox();

?>

 
</body>
</html>

login.php

<?php

session_start(); // sessie starten

include 'connect.php'; //include database connectie 
include 'functions.php'; //include functies

if (!empty($_POST)){
	$query = "SELECT * FROM users
			WHERE username='" . $_POST["username"] ."'
			AND password='".$_POST["password"] ."'";

	$result = mysql_query($query) or die ("Fout: " .mysql_error()); 
	
	if (mysql_num_rows($result) > 0){
		//username gevonden, registreer in sessie
		$username = $_POST["username"];
		$password = $_POST["password"];
		session_register("username");
		session_register("password");
		
		//username en wachtwoord komt overeen, doorsturen naar desbetreffende pagina
		header("Location: index2.php");
		exit();
		
		}else{
			//niet de goede username gevonden of ongeldige combinatie
			echo "U heeft geen geldige combinatie van username en password ingevoerd.";
			show_loginbox();
			
		}
	}else{
		//pagina was incorrect aangeroepen, terug naar index.php
		header("Location: index.php");
	}

?>

functions.php
<?php

function show_loginbox()
{
echo '<table>
<tr><td colspan="2"><b>Inloggen</b></td></tr>
<form name="login formulier" action="login.php" method="post" />
<tr><td width="200">Gebruikersnaam </td><td><input type="text" name="username" size="30" maxlength="40" /></td></tr>
<tr><td width="200">Wachtwoord </td><td><input type="password" name="password" size="20" maxlength="15" /></td></tr>
<tr><td colspan="2"><input type="submit" value="Login" /></td></tr>
</form>
</table>';
}
?>
index2.php

<?php

session_start();

?>
<html>
<head>
<title>Untitled Document</title>
</head>

<body>
<?php
if (!isset($_SESSION["username"])){
	echo "u bent nog niet aangemeld. <br />
		<a href=\"index.php\">hier inloggen</a>";

}else{?>

<b>Welkom op de beveiligde pagina</b><br />
U bent aangemeld als: <?php echo($_SESSION["username"]); ?>

<?php
}
?>

</body>
</html>


edit: graag werkwijze en eventuele stukjes code als advies, anders snap ik er nog niks van :P!

edit2: advies over opmaak is ook welkom.
session_register? Beter kan je de $_SESSION variable gebruiken, wat je trouwens wel doet in index2.php
Verder, tabellen voor de opmaak zijn natuurlijk nooit echt netjes ;)

Reageren