Loading:

Postanowienia noworoczne - a Ty czego nauczysz się w nowym roku? [-25%]

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.

 



Napisz Artykuł

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>


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5893

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: adam2811 Ranga: Poziom 7 Punktów: 200
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors