Ik wou graag enige bruteforce protection op mijn website maken waarbij als je 3 keer foute login hebt gedaan, je 50 minuten niet kan inloggen etc., en ik had het volgende:
<?php
function checkWrongAttempts($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('UTC');
$searchWrongAttemptsSql = $link->query("SELECT * FROM `".$settings['path']."foutepogingen` WHERE `ip`='".sha1($ip)."' AND `plaats`='".$link->real_escape_string($plaats)."' ORDER BY `datum` DESC");
if ($searchWrongAttemptsSql && $searchWrongAttemptsSql->num_rows >= 3)
{
$wrongAttempt = $searchWrongAttemptsSql->fetch_assoc();
if ($datum <= strtotime('+5 minutes', $wrongAttempt['datum']))
{
return false;
}
}
}
function insertWrongAttempt($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('UTC');
$insertWrongAttempt = $link->query("INSERT INTO `".$settings['prefix']."foutepogingen` (`ip`, `plaats`, `datum`) VALUES ('".sha1($ip)."', '".$link->real_escape_string($plaats)."', '".$link->real_escape_string($datum)."')");
if ($insertWrongAttempt)
{
return true;
}
}
function login($gebruikersnaam, $wachtwoord)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('UTC');
if (checkWrongAttempts(getIp(), 'index') != true)
{
$searchUserSql = $link->query("SELECT `id`, `wachtwoord` FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");
if ($searchUserSql && $searchUserSql->num_rows === 1)
{
$userDetails = $searchUserSql->fetch_assoc();
if (!password_verify($wachtwoord, $userDetails['wachtwoord']))
{
if (insertWrongAttempt(getIp(), 'index') === true)
{
return false;
}
}
}
else
{
if (insertWrongAttempt(getIp(), 'index') === true)
{
return false;
}
}
}
else
{
return false;
}
}
?>
Maar hij blijft hierbij het gehele script uitvoeren, terwijl ik al 25 keer foute login heb gedaan.. Zelf denk ik dat het probleem bij het checken ligt, maar ik dit lukt mij niet om te debuggen Alvast bedankt voor de hulp!