Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kod Captcha Na Rejestracji


morpheus159

Rekomendowane odpowiedzi

Opublikowano

ZABEZPIECZENIE FORMULARZA TOKENEM

 

Wielu z was zadaje pytania typu w jaki sposób obronić się przed botami panoszącymi się w Internecie. Wiem, że jest to dosyć dokuczliwe, bo sam musiałem się przed tym bronić. Widzę ile niepotrzebnych postów (tworzonych przez roboty) jest przez nie pisanych. Ten problem jest dosyć powszechny, więc kolejny tutorial będzie dotyczył jednej z form walki z botami, a mianowicie zabezpieczanie formularza TOKENEM.

 

 

Nasz skrypt będzie działał w oparciu o 4 pliki:

- pic.php - plik generujący obrazki

- hasla.txt - plik z hasłami

- form.php - formularz, który będzie zabezpieczony

- sprawdz.php - plik sprawdzający, czy został wpisany poprawny kod

 

Skrypt ten jest oparty o bazę słów znajdujących się w pliku tekstowym. Wybrałem tę formę, ponieważ jest wiele serwisów tematycznych i słowa w tokenie można dopasować do tematyki strony. W moim przykładzie są to słowa 5 literowe , ale nic nie stoi na przeszkodzie, aby były one dłuższe, lub krótsze. Ilość haseł także nie ma wpływu na działanie skryptu. Dostosuje się on automatycznie do ilości słów i do ich długości. Skrypt składa się z 4 plików, ale jest możliwość zrobienia go w 2, lecz nie zastosowałem tego, bo wiem, że dużo osób includuje skrypty i mają oni problemy.

 

 

No to zaczynamy...

 

 

Na samym początku robimy listę słów i zapisujemy ją w pliku hasla.txt. Poniższe słowa są przykładowe.

HASLA.TXT

felga
jasyr
aloes
obawy
widne
uczta
wrogi
klapa
tropy
cynik
kakao
gminy
kotem
halny
robak
bramy
worms

Wiem, że jest to uboga baza, a co się z tym wiąże, często słowa będą się dublować. Ale jednak są one stworzone tylko jako przykład.

 

PIC.PHP

Teraz przejdziemy do zasadniczej części naszego tokenu, a więc do pliku generującego obrazki. Nazwiemy go pic.php. Aby plik działał, serwer musi obsługiwać bibliotekę GD!

<?
$slowa=file('hasla.txt');

if(isset($_GET['id'])) 
       $nr=$_GET['id'];
       else $nr=rand(0,count($slowa)-1);

$slowo=$slowa[$nr];

Na samym początku wczytujemy do tablicy wszystkie słowa z pliku hasla.txt. Następnie sprawdzamy, czy istnieje w adresie zmienna id. Jeśli nie, to losujemy dowolne słowo z pliku. Jeśli natomiast jest, to wyświetlamy słowo określone podanym identyfikatorem.

$wysokosc=20;
$szerokosc=60;


$pic=ImageCreate($szerokosc,$wysokosc);

W następnej kolejności tworzymy nowy obrazek o podanych rozmiarach. Te dane są dopasowane do słów 5-literowych, więc jeśli ktoś ma zamiar korzystać z dłuższych słów, powinien te wielkości powiększyć. Wykonane funkcje są dokładniej opisane w tutorialu o tworzeniu rysunków za pomocą PHP.

$bialy=ImageColorAllocate($pic,255,255,255);
$czarny=ImageColorAllocate($pic,0,0,0);
$szary=ImageColorAllocate($pic,150,150,150);

ImageFill($pic,1,1,$bialy);

Następnie tworzymy kilka kolorów i wypełniamy tło na biało.

for($i=0;$i<200;$i++)
       {
       $los1=rand(0,$szerokosc);
       $los2=rand(0,$wysokosc);

       ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
       }

W kolejnej części tworzymy losowe punkty na całym obszarze obrazka. W tym wypadku jest ich 200, ale nic nie stoi na przeszkodzie, aby tą ilość zmienić.

for($i=0;$i<count($slowa);$i++)
       {
       $rozmiar=rand(2,5);

       ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny);
       }

W tej pętli natomiast wypisujemy wylosowane słowo. Każda literka (rozmiar) będzie losowana, aby utrudnić rozpoznanie. Literki będą oddalone od siebie o 10 pikseli ($i*10+7) i dodatkowo 7 pikseli od lewego brzegu (,$i*10+7).

Header("Content-type: image/gif");
ImageGIF($pic);
?>

I na samym końcu wysyłamy obrazek do przeglądarki.

 

Kolejnym elementem naszego skryptu jest zrobienie formularza, który będzie obsługiwał token. Nazwiemy go form.php.

FORM.PHP

<form method="POST" action="sprawdz.php">

       <table>
               <tr>
                       <td>Imię:</td>
                       <td><input type="text" name="imie" size="20" value="<? echo $_POST['imie']; ?>"></td>
               </tr>
               <tr>
                       <td>Nazwisko:</td>
                       <td><input type="text" name="nazwisko" size="20" value="<? echo $_POST['nazwisko']; ?>"></td>
               </tr>

Tej części chyba nie muszę tłumaczyć, wyświetla on standardowe dane dotyczące formularza.

                       <tr>
                       <td><?
$slowa=file('hasla.txt');
$id=rand(0,count($slowa)-1);

echo '<img src="pic.php?id='.$id.'"></td><td><input type="text" name="token" size="20">';

?></td>
               </tr>
       </table>
       <input type="submit" value="OK">
<input type="hidden" name="los" value="<? echo $id; ?>">
</form>

W tej części formularza losujemy liczbę z zakresu od 0 do ilości słów minus jeden (php liczy od zera) i wyświetlamy obrazek z określonym numerkiem. Dodatkowo za pomocą ukrytego pola (hidden) przesyłamy dalej numer słowa, aby móc potem sprawdzić jego poprawność.

 

 

I teraz ostatnia część skryptu, a mianowicie plik sprawdzający poprawność wpisanego tokenu. Nazywa się on sprawdz.php.

 

SPRAWDZ.PHP

<?
$id=$_POST['los'];
$odp=$_POST['token'];

$slowa=file('hasla.txt');

if(trim($slowa[$id])==$odp)
       {
       echo 'Token poprawny!';
       //dalsze instrukcje, jeśli token jest poprawny
       }
else    
       {
       echo 'Token niepoprawny!<br><br>';
       include('form.php');
       //dalsze instrukcje, jeśli token jest niepoprawny
       }
?>

Skrypt wczytuje tablicę z plikami i następnie porównuje, czy słowo wpisane przez usera jest takie same jak na obrazku. Jeśli tak jest wyświetla on stosowny komunikat, w przeciwnym natomiast wyświetla komunikat o błędzie i ponownie wyświetla formularz, tym razem już z innym obrazkiem.

 

 

Mam nadzieję, że za pomocą tego tutoriala choć trochę pomogłem wam w problemach związanych z botami internetowymi. Skrypt nie jest zbyt trudny, ale za to bardzo przydatny. Jak na razie jest to jedna z lepszych metod walki z robotami.

 

Pokażę, jeszcze jak wygląda takie zabezpieczenie:

tokenvy5.jpg

A Tu Z Skąd To Jest

mpcubfluo.png

 

1295889758-U198706.png

 

1281382571-U198706.png

 

1283694067-U198706.png

 

1281380939-U1.png

 

youtube.png

 

 

 

NIE BOĆ ŻYŁA DAJ + JAK STAWIASZ TO MNIE MOBILIZUJE DO DALSZEJ PRACY

Opublikowano

a jak zrobic zamiast polskich znaczkow,to chinskie? ;p

 

Edtit@

 

Nie kapce tego momentu,obrazek mam zrobić czy jak?

 

Na samym początku wczytujemy do tablicy wszystkie słowa z pliku hasla.txt. Następnie sprawdzamy, czy istnieje w adresie zmienna id. Jeśli nie, to losujemy dowolne słowo z pliku. Jeśli natomiast jest, to wyświetlamy słowo określone podanym identyfikatorem.
$wysokosc=20;
$szerokosc=60;


$pic=ImageCreate($szerokosc,$wysokosc);

W następnej kolejności tworzymy nowy obrazek o podanych rozmiarach. Te dane są dopasowane do słów 5-literowych, więc jeśli ktoś ma zamiar korzystać z dłuższych słów, powinien te wielkości powiększyć. Wykonane funkcje są dokładniej opisane w tutorialu o tworzeniu rysunków za pomocą PHP.
$bialy=ImageColorAllocate($pic,255,255,255);
$czarny=ImageColorAllocate($pic,0,0,0);
$szary=ImageColorAllocate($pic,150,150,150);

ImageFill($pic,1,1,$bialy);

Następnie tworzymy kilka kolorów i wypełniamy tło na biało.
for($i=0;$i<200;$i++)
       {
       $los1=rand(0,$szerokosc);
       $los2=rand(0,$wysokosc);

       ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
       }

W kolejnej części tworzymy losowe punkty na całym obszarze obrazka. W tym wypadku jest ich 200, ale nic nie stoi na przeszkodzie, aby tą ilość zmienić.
for($i=0;$i<count($slowa);$i++)
       {
       $rozmiar=rand(2,5);

       ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny);
       }

W tej pętli natomiast wypisujemy wylosowane słowo. Każda literka (rozmiar) będzie losowana, aby utrudnić rozpoznanie. Literki będą oddalone od siebie o 10 pikseli ($i*10+7) i dodatkowo 7 pikseli od lewego brzegu (,$i*10+7).
Header("Content-type: image/gif");
ImageGIF($pic);
?>

I na samym końcu wysyłamy obrazek do przeglądarki.

Opublikowano

<input type="hidden" name="los" value="<? echo $id; ?>">

Nie żartuj sobie, już chociaż na sesji to zrób, ktoś złapie plik z hasłami i będzie zakładał konta jak leci.

I dodaj, że wymagana jest obsługa GD w ustawieniach php<;

  • 1 miesiąc temu...
Admin Cienia
Opublikowano

Brak prefixów, proszę o zapoznanie się z regulaminem a moderatorów proszę o kasowanie zamkniętych tematów.

Astra G 2.0 Turbo 247KM 351NM

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...