Skip to content

Instantly share code, notes, and snippets.

@jswebschmiede
Last active May 18, 2023 14:00
Show Gist options
  • Save jswebschmiede/86f4a1dfc51168e6d40efd45f9d24c59 to your computer and use it in GitHub Desktop.
Save jswebschmiede/86f4a1dfc51168e6d40efd45f9d24c59 to your computer and use it in GitHub Desktop.

Revisions

  1. jswebschmiede renamed this gist May 18, 2023. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. jswebschmiede created this gist May 18, 2023.
    49 changes: 49 additions & 0 deletions loginattemps.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,49 @@
    <?php
    session_start();

    // Zeitraum in Sekunden, in dem die Anzahl der Versuche begrenzt wird
    $limitPeriod = 3600; // 1 Stunde

    // Maximale Anzahl erlaubter Versuche pro IP-Adresse innerhalb des Zeitraums
    $maxAttempts = 3;

    // Eindeutiger Schlüssel für die IP-Adresse in der Session
    $ipKey = 'form_attempts_' . $_SERVER['REMOTE_ADDR'];

    // Überprüfen, ob der Schlüssel in der Session existiert
    if (!isset($_SESSION[$ipKey])) {
    // Wenn der Schlüssel nicht existiert, initialisiere ihn
    $_SESSION[$ipKey] = [
    'attempts' => 1, // Erster Versuch
    'time' => time() // Zeitstempel des ersten Versuchs
    ];
    } else {
    // Wenn der Schlüssel existiert, überprüfe die Anzahl der Versuche und den Zeitraum
    $attempts = $_SESSION[$ipKey]['attempts'];
    $startTime = $_SESSION[$ipKey]['time'];
    $currentTime = time();

    if ($currentTime - $startTime < $limitPeriod) {
    // Zeitraum noch nicht abgelaufen

    if ($attempts >= $maxAttempts) {
    // Maximalzahl der Versuche erreicht
    echo "Sie haben die maximale Anzahl an Versuchen überschritten. Bitte versuchen Sie es später erneut.";
    exit;
    } else {
    // Erhöhe die Anzahl der Versuche
    $_SESSION[$ipKey]['attempts']++;
    }
    } else {
    // Zeitraum abgelaufen, setze die Versuche zurück
    $_SESSION[$ipKey] = [
    'attempts' => 1,
    'time' => $currentTime
    ];
    }
    }

    // Verarbeiten Sie hier den Formularsubmit
    // ...

    ?>