Hallo!

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!
Die validatie kan je omzetten in een array met validatiefouten, welke je returned vanuit de Validatie-class.
overigens zou je als eerste je validatie moeten uitvoeren en dan pas verwerken
Dat klopt. Je kan een object aanmaken met getValidationErrors(). Als deze leeg is (of 0) is er aan de controles voldaan, en kan je de verwerking starten.
@Rob

Waarom ga je niet eerst de basis wat beter leren? Een tijdje terug is je al verteld dat je code een zootje is, en vervolgens zie ik nu weer dat je op precies dezelfde manier bezig bent. Je wil teveel en je neemt te weinig aan van mensen die jou tips geven, zoals hierboven bijv. de tips van Ariën.

Als je nog niet weet hoe bepaalde zaken werken, dan is het zinvol om daar eerst je tijd en energie in te steken, en om daarmee te gaan oefenen. Hoe je nu bezig bent BLIJF je tegen allerlei problemen aanlopen.
Ik ga mee met Ozzie, en ik ben toch wel benieuwd hoe je nou precies dit leert? Ik zie regelmatig beginnersfouten in de code en ik heb het idee dat je maar wat probeert? Ik ben ook benieuwd of je ook beseft of je de theorie ook daadwerkelijk weet van de praktijk die je uitvoert? Dit is nu juist belangrijk.
Zorg ervoor dat je per regel in je hoofd kan vertellen wat er exact gebeurt.
En nog als aanvulling op Ariën:

Maak je code leesbaar! Nu snap je misschien wat je aan het doen bent, maar over twee weken is er voor jezelf ook geen touw meer aan vast te knopen. Al die ifs en elses is (met alle respect) totale bagger. Niemand ziet wat je aan het doen bent en de code is totaal niet te onderhouden. Code moet je in één oogopslag kunnen lezen als een boek. Dat is bij jou absoluut niet het geval. Dat van jou lijkt meer op een kruiswoordpuzzel. En een functie moet kort zijn. Die van jou is een lange onleesbare brij. Begin bij het begin. Zorg dat je de basis begrijpt. Ga eerst kleine dingen maken ter oefening. Dit is de laatste keer dat ik het nu zeg. Doe ermee wat je wilt.

Reageren