• 20-03-2022, 15:28:30
    #1
    Arkadaşlar merhaba. Kullanıcı 3 kez yanlış şifre girdiğinde ip'sini 3-5 dakika engellemek istiyorum. Aşağıdaki kodlarda da yaptığım şu: Kullanıcı girişini saydırıp session'a kaydediyorum. Session'daki sayı 3 olduğunda kullanıcıya uyarı veriyor, "3 kez hatalı giriş denemesi yaptınız" gibi. Şimdi, session'ı tanımlıyorum ama değer vermeden. Eğer "0" değerini verirsem sayfa boş geliyor. Eğer string bir değer verirsem session'ı saydıramıyorum ve log sayfasında, "numerik bir değer değil" uyarısını da veriyor. Ama "$_SESSION["guvenlikgirisi"];" bu şekilde kullanırsam saydırabiliyorum. Ama "undefined session" uyarısı veriyor log'da. Bu arada, database sayfasında session'ı başlattım önceden.

    Bir de, ip'yi nasıl engellerim. Kullanıcı kayıt yaparken ip'sini kaydettiriyorum. Kullanıcı 3 kez yanlış denemesi yapmışsa, ip'si ile veritabanındaki ip'yi karşılaştırıyorum. Aynı çıkarsa uyarı veriyorum ama ip'yi nasıl engelleyebilirim bilemiyorum.
    <?php
    if($_POST['kullanicigirisgonder']) {
    
    $_SESSION["guvenlikgirisi"];
    
    $guvenlik_ip = $_SERVER['REMOTE_ADDR'];
    
    
    $kullaniciadi = trim(strip_tags(base64_encode($_POST['kullanicigirisadi'])));
    $kullanicisifre = trim(strip_tags(base64_encode($_POST['kullanicigirissifre'])));
    $guvenlikkodudogrula = trim(strip_tags($_POST['guvenlikkodudogrula']));
    $sessional = $_SESSION["kod"];
    
    
    /* if(!empty($_SESSION["kod"]) AND ($guvenlikkodudogrula == $_SESSION["kod"])) { */
    if($guvenlikkodudogrula != $sessional) {
    ?>
    
    <div class='hatali-kullanicigirisi-uyarisi'>
    <?php
    echo ("Güvenlik kodu yanlış girilmiş olabilir <br> Lütfen Tekrar Deneyiniz <br> Giriş Formu'na Yönlendiriliyorsunuz");
    header("Refresh:2; url=giris-formu-guvenlik.php");
    ?>
    </div>
    
    <?php
    $_SESSION["guvenlikgirisi"] += 1;
    if ($_SESSION["guvenlikgirisi"] > 2) {
    header("Location:engellenmis.php");
    }
    
    /* header("Refresh:2; url=giris-formu-guvenlik.php"); */
    } else {
    
    
    $girissorgusu = "SELECT * FROM kullanicilar WHERE kullanicilar_kullaniciadi = '$kullaniciadi' AND kullanicilar_sifre = '$kullanicisifre'";
    $girissorgu = mysqli_query($db, $girissorgusu);
    $sonuc = mysqli_fetch_array($girissorgu);
    
    if(($sonuc['kullanicilar_kullaniciadi'] == $kullaniciadi) AND ($sonuc['kullanicilar_sifre'] == $kullanicisifre)) {
    $_SESSION['adi'] = $sonuc;
    $_SESSION['sifresi'] = $sonuc;
    
    if(!empty($_POST['benihatirla'])) {
    $cerez = trim(strip_tags($_POST['benihatirla']));
    $cerezadi = "kullanicicerezi";
    $cerezdegeri = "kullanicicerezsifre";
    setcookie($cerezadi, $cerezdegeri, time() + (86400), "/"); // 86400 = 1 day
    } else {
    
    }
    
    header("Location:index.php");
    } else {
    ?>
    <div class='hatali-kullanicigirisi-uyarisi'>
    <?php
    echo "<center><img src='images/onayhataresimleri/unlem.png'></center>";
    echo ("Giriş Bilgileriniz Hatalı <br> Lütfen Tekrar Deneyiniz <br> Giriş Formu'na Yönlendiriliyorsunuz");
    header("Refresh:2; url=giris-formu.php");
    }
    ?>
    </div>
    <?php
    }
    }
    ?>
  • 20-03-2022, 15:34:46
    #2
    tanımsız bir sessionu kullanmak istediğin için uyarı alıyor olabilirsin if(isset($_SESSION['guvenlikgirisi'])) seklinde sessionun var olup olmadığını kontrol edebilirsin
  • 20-03-2022, 15:43:43
    #3
    Undefined index: hatası veriyor. undifined session değil.
  • 20-03-2022, 16:27:52
    #4
    $_SESSION["guvenlikgirisi"]=0;
  • 20-03-2022, 17:13:08
    #5
    $_SESSION["guvenlikgirisi"]=0;
    Bu şekilde değer verdiğimde sayma işlemi yapmıyor.
  • 20-03-2022, 19:22:03
    #6
    Sorunu çözdüm. İlk satırlardaki
    $_SESSION["attempts"];
    kısmını
    if(!isset($_SESSION["attempts"])) {
    $_SESSION["attempts"] = 0;
    }
    olarak;

    Alt satırlardaki
    $_SESSION["attempts"] += 1;
    kısmını da
    intval($_SESSION["attempts"] += 1);
    şeklinde yaptım ve sorunu çözdüm.