Zabespieczenie formularza tokenem [PHP]
Token ma zabezpieczyć przed spamowaniem formularzy przez spamerów, oraz botami panoszącymi się w Internecie. Istnieje możliwość rozwiązania tego problemu poprzez dołączenie do formularza mechanizmów CAPTACHA - tokena - obrazka z kodem, który należy przepisać do pola formularza obok obrazka z kodem.
Listing
Tworzymy plik process.php
<?php
session_start(); // start sesji
$session = $_SESSION['captcha']; // zdefiniowanie sesji
$image = $_POST['image'];
$image = md5($image); // szyfrowanie MD5
if ($session == $image){
// dalsze instrukcje, jeśli token jest poprawny
echo "KOD POPRAWNY";
}
// dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza
else{
//header("Location: form.php");
echo "<div style=\"width: 100px\">";
echo "<div style=\"border: 2px solid blue; text-align: center\">";
echo "<font style=\"color: red; font-family: verdana; font-size: 12px; font-weight: bold\">BŁĘDNY KOD</font></div>";
echo "<div style=\"text-align:center\">";
echo "<input type=\"button\" value=\"Wróć\" onClick=\"history.back()\"></div></div>";
}
?>
Następnie tworzymy plik image.php
<?php
session_start();
// wysłanie nagłówków do przeglądarki
header ("(anti-spam-content-type:) image/jpg");
// generowanie liczb losowych do wykorzystania w naszym szyfrowaniu
$enc_num = rand(0, 9999); // numer ten jest szyfrowany
$key_num = rand(0, 24); // używany ciąg znaków wykorzystany na obrazku
// użyj losowy ciąg cyfr i liter przy użyciu Md5
// ilość wyświetlanych znaków w naszym przypadku 5
$hash_string = substr(md5($enc_num), $key_num, 5);
$hash_md5 = md5($hash_string);
// przypisanie do sesji
$_SESSION['captcha'] = $hash_md5;
// tworzą zestaw obrazów jako tło pod tokenem
$bgs = array("imag/back1.jpg", "imag/back2.jpg", "imag/back3.jpg");
// wybiera obraz tła przy użyciu funkcji podręcznej array_rand
$background = array_rand($bgs, 1);
// ustawia jako tło losowo wybrany gif
$img_handle = imagecreatefromjpeg($bgs[$background]);
// kolor czcionki, tekstu
$text_colour = imagecolorallocate($img_handle, 0, 0, 0);
// wielkosc czcionki, tekstu
$font_size = 5;
// pobierz wymiary poziome i pionowe obrazu tla
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];
// pozycja pozioma
$horiz = round(($img_w/2)-((strlen($hash_string)*imagefontwidth(5))/2), 1);
// pozycja pionowa
$vert = round(($img_h/2)-(imagefontheight($font_size)/2));
// umieść wygenerowany tekst na tle
imagestring($img_handle, $font_size, $horiz, $vert, $hash_string, $text_colour);
// tworzenie obrazu
imagejpeg($img_handle);
// usuwanie obrazu
imagedestroy($img_handle);
?>
Na koniec tworzymy plik form.php
<form method="post" action="process.php">
<img src="image.php" border="0"><br/>
<input type="text" name="image"><br/>
<input type="submit" value="Wyślij">
<input type="button" value="Odśwież" onClick="window.location.reload()">
</form>
<?php
session_start(); // start sesji
$session = $_SESSION['captcha']; // zdefiniowanie sesji
$image = $_POST['image'];
$image = md5($image); // szyfrowanie MD5
if ($session == $image){
// dalsze instrukcje, jeśli token jest poprawny
echo "KOD POPRAWNY";
}
// dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza
else{
//header("Location: form.php");
echo "<div style=\"width: 100px\">";
echo "<div style=\"border: 2px solid blue; text-align: center\">";
echo "<font style=\"color: red; font-family: verdana; font-size: 12px; font-weight: bold\">BŁĘDNY KOD</font></div>";
echo "<div style=\"text-align:center\">";
echo "<input type=\"button\" value=\"Wróć\" onClick=\"history.back()\"></div></div>";
}
?>
Następnie tworzymy plik image.php
<?php
session_start();
// wysłanie nagłówków do przeglądarki
header ("(anti-spam-content-type:) image/jpg");
// generowanie liczb losowych do wykorzystania w naszym szyfrowaniu
$enc_num = rand(0, 9999); // numer ten jest szyfrowany
$key_num = rand(0, 24); // używany ciąg znaków wykorzystany na obrazku
// użyj losowy ciąg cyfr i liter przy użyciu Md5
// ilość wyświetlanych znaków w naszym przypadku 5
$hash_string = substr(md5($enc_num), $key_num, 5);
$hash_md5 = md5($hash_string);
// przypisanie do sesji
$_SESSION['captcha'] = $hash_md5;
// tworzą zestaw obrazów jako tło pod tokenem
$bgs = array("imag/back1.jpg", "imag/back2.jpg", "imag/back3.jpg");
// wybiera obraz tła przy użyciu funkcji podręcznej array_rand
$background = array_rand($bgs, 1);
// ustawia jako tło losowo wybrany gif
$img_handle = imagecreatefromjpeg($bgs[$background]);
// kolor czcionki, tekstu
$text_colour = imagecolorallocate($img_handle, 0, 0, 0);
// wielkosc czcionki, tekstu
$font_size = 5;
// pobierz wymiary poziome i pionowe obrazu tla
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];
// pozycja pozioma
$horiz = round(($img_w/2)-((strlen($hash_string)*imagefontwidth(5))/2), 1);
// pozycja pionowa
$vert = round(($img_h/2)-(imagefontheight($font_size)/2));
// umieść wygenerowany tekst na tle
imagestring($img_handle, $font_size, $horiz, $vert, $hash_string, $text_colour);
// tworzenie obrazu
imagejpeg($img_handle);
// usuwanie obrazu
imagedestroy($img_handle);
?>
Na koniec tworzymy plik form.php
<form method="post" action="process.php">
<img src="image.php" border="0"><br/>
<input type="text" name="image"><br/>
<input type="submit" value="Wyślij">
<input type="button" value="Odśwież" onClick="window.location.reload()">
</form>
Dodano przez: adam2811 Ranga: 0 Punktów: 0
Komentarze użytkowników
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno