Skocz do zawartości

[PHP] Pytanie


Perykles

Polecane posty

Czemu tu nikt nie tworzy tematów? ;)

 

Mam więc takie małe pytanko, proszę o szybką odpowiedź (wogóle o odpowiedź proszę ;P) - jak zrobić, żeby po trzech nieudanych próbach uzytkownika, następowała blokada IP? Z blokadą może sobie jakoś poradze, chodzi mi o to, żeby następowała po 3 nieudanych próbach. Wykombinowałem coś takiego:

 

if($ile1==1)
    {
    $_SESSION['zalogowany'] = $id;
echo ("<b>Zostałeś zalogowany jako '".$_POST['login']."'.
    Jeśli przekierowanie nie nastąpi w ciągu 5 sekund, kliknij
    <a href=\"index.php\">tutaj</a>.");
    } elseif ($ile1!==1) {
         for($i=0; $i<3; $i++) {
echo $i;
echo("Nieprawidłowe dane");
         continue;
         if($i == 3) { 
         $_POST['ip'] = 1;
         $_POST['data'] = time() + (10 * 60);
         $query = "INSERT INTO bans VALUES('".$_POST['login']."', '".$_POST['ip']."', '".$_POST['data']."')";
         $wynik = mysqli_query($conn, $query);
echo ('aaa');
exit(); 
    } 
    }
    }

 

 

Tylko że w tym kodzie jak jest nieudana próba logowania to pisze: Nieprawidłowe dane.Nieprawidłowe dane.Nieprawidłowe dane.

 

A co zrobić, żeby było po kolei?

 

Z góry dzięki za odpowiedź i pozdawiam ;)

Link do komentarza
Udostępnij na innych stronach

Musisz utworzyć sobie jakąś tabelę w której będziesz przechowywał adresy IP, ilość nieudanych prób i czas ostatniej próby.

1. wyszukaj w tabeli adres IP jeśli ilość prób == 3 i czas ostatniej próby mniejszy niż 15 min wstecz to wyświetl błąd i zakończ. w przeciwnym wypadku dalej:

2. użytkownik podaje dane do logowania. jeśli są dobre to zaloguj w przeciwnym przypadku:

3. sprawdź czy istnieje w danej tabeli dane IP jeśli tak zwiększ licznik i uaktualnij czas ostatniej próby jeśli nie istnieje to utwórz odpowiedni wpis

 

teraz jeszcze powinieneś przemyśleć jak zrobić czyszczenie tej tabeli. Możesz np. raz w tygodniu wykonywać polecenie usuwania adresów IP jeśli są starsze niż 15 min. Możesz wykonywać to po każdym logowaniu się któregoś z użytkowników (tylko że wtedy może wszystko zwolnić, a w sumie nie potrzebujesz czyścić tej tabeli akurat w czasie pracy użytkowników - możesz to robić w nocy ;))

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

Wymodziłem coś takiego:

 

<?php
session_start();
    $salt = sha1(...);
    $conn = mysqli_connect(...);
    $query1 = "SELECT * FROM Users WHERE Login='".mysqli_real_escape_string($conn, sha1($_POST['login'].$salt))."' and Haslo='".mysqli_real_escape_string($conn, sha1($_POST['haslo'].$salt))."'";
               $wynik1 = mysqli_query($conn, $query1);
               $ile1 = mysqli_num_rows($wynik1);
    $query2 = "SELECT ID FROM Users WHERE Login='".mysqli_real_escape_string($conn, sha1($_POST['login'].$salt))."'";
               $wynik2 = mysqli_query($conn, $query2);
               $ile2 = mysqli_fetch_row($wynik2);
                     $_POST['id'] = $row[0];

    $_POST['ip'] = $_SERVER['REMOTE_ADDR'];
    $query3 = "SELECT * FROM bans WHERE ip='".$_POST['ip']."'";
    $wynik3 = mysqli_query($conn, $query3);
    $ile3 = mysqli_fetch_array($wynik3);
    $proby = $row[1];
    $data = $row[2];
    if($proby == 3 && $data > 10) {
echo ('Przekroczyłeś ilość dozwolonych błędów w logowaniu. Spróbuj ponownie za 10 minut.');
exit();
    }
    if($ile1 == 1)
    {
        $_SESSION['zalogowany'] = $_POST['id'];
echo ("<b>Zostałeś zalogowany jako '".$_POST['login']."'.Jeśli przekierowanie nie nastąpi w ciągu 5 sekund, kliknij<a href=\"index.php\">tutaj</a>.");
    } elseif ($ile1!==1) {
echo ('Nieprawidłowe dane.');
        $query4 = "INSERT INTO bans VALUES('".$_POST['ip']."', '".$_POST['proby']."', '".$_POST['data']."')";
        $wynik4 = mysqli_query($conn, $query4);
        $query5 = "SELECT * FROM bans WHERE ip='".$_POST['ip']."'";
        $wynik5 = mysqli_query($conn, $query5);
        $ile5 = mysqli_num_rows($wynik5);
        if($ile5 == 1) {
        $_POST['proby'] = $_POST['proby'] +1;
        $_POST['data'] = 10;
       $query6 = "UPDATE bans SET proby='".$_POST['proby']."', czas='".$_POST['data']."' WHERE ip='".$_POST['ip']."')";
       $wynik6 = mysqli_query($conn, $query6);
exit();
    }
    }
?>

 

Zapisuje do bazy wszystko, tylko że w ostatniej części kodu, zmienna $ile5 jest równa 0, dlaczego?

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Witam, Jestem tu nowa więc na początku chciałam się przywitać: Cześć wszystkim :rolleyes:

Swojego czasu stworzyłam stronkę w html a teraz chciałabym umieścić na niej ankietę w php.Przyznam się, że jestem trochę zielona z PHP...

 

Chciałabym aby formularz ankiety składał się z 10 pytań (pisząc ankieta mam na myśli formularz do którego wprowadzamy informacje i są one zapisywane do bazy- jak to zrobić help bo nie wiem...;/ ), z wykorzystaniem np. wyrażeń regularnych.na stronie powinien znajdować się także skrypt wyświetlający dane wypełnionych ankiet. Jeśli jest to możliwe i ktoś kto mógłby mi odpowiedziec i podac jakas lekture zwiazna z tematem. Z góry dzięki...

Link do komentarza
Udostępnij na innych stronach

www.google.pl - najlepsza lektura pod słońcem. Jest wyposażona w wyszukiwarkę, więc jak dobrze wpiszesz szukaną treść, to nie będziesz musiała nawet czytać całości!!! Tylko wybraną część. Ciekaw tylko jestem, jak na to forum trafiłaś...

Link do komentarza
Udostępnij na innych stronach

Zamiast pisać od początku sondę w php poszukałbym na Twoim miejscu jakiegoś gotowego skryptu, który mniej więcej mi pasuje a potem go ew. dopasował wyglądem do swoich upodobań ew. designu strony. Nie ma sensu wynajdować koła od początku i pisać takie coś jak można znaleźć sporo takich rzeczy w necie.

 

Ew. jeśli chcesz pokusić się i pomęczyć rzeczywiście chwile i sama skodzić to jakieś proste początki pisania sondy są tu: http://www.antylameriada.net/wsonda/

 

Albo skorzystaj ze strony: http://www.sonda.pl/ nie trzeba nic robić tylko założyć tam konto przeklepać kod na swoją stronę i cieszyć się z sondy :) (jedynie problem jest, że wyświetlana jest tam gdzieś reklama) ale to zależy czego oczekujesz.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...