Skrypty > eVisualConfirm

Skrypt umożliwia zabezpieczenie strony przed robotami sieciowymi spamującymi na forach, w komentarzach itd.
Ma szerokie możliwości konfiguracyjne, dające wyższy poziom bezpieczeństwa.
Skrypt oraz zestaw tekstur i czcionek można pobrać w dziale Download.

Plik image.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
//======eVisualConfirm v2.0.01======
// Author: Emdek
// Licence: GPL
// http://emdek.cba.pl
// 2006-07-21 14:31:18 CEST
session_start ();
header ('Content-type: image/png');
header ('Expires: '.gmdate ('r', 0));
header ('Last-Modified: '.gmdate ('r'));
header ('Cache-Control: no-store, no-cache, must-revalidate');
header ('Pragma: no-cache');
$Textures = glob ('textures/*.jpg');
$Fonts = glob ('fonts/*.ttf');
$Texture = imagecreatefromjpeg ($Textures[mt_rand (0, count ($Textures) - 1)]);
$Width = 15 + (30 * strlen ($_SESSION['e_VCText']));
$Image = imagecreatetruecolor ($Width, 50);
imagecopyresampled ($Image, $Texture, 0, 0, 0, 0, $Width, 50, 150, 50);
imagedestroy ($Texture);
for ($i = 0; $i < strlen ($_SESSION['e_VCText']); $i++) imagettftext ($Image, mt_rand (22, 26), mt_rand (- 10, 10), (10 + (30 * $i)), (30 + (mt_rand (0, 10))), imagecolorallocatealpha ($Image, mt_rand (0, 128), mt_rand (0, 128), mt_rand (0, 128), 25), $Fonts[mt_rand (0, count ($Fonts) - 1)], $_SESSION['e_VCText'][$i]);
if ($_SESSION['DHeight'] && $_SESSION['DHeight'] != 50) {
   $NWidth = ($_SESSION['DHeight'] / 50) * $Width;
   $TImage = imagecreatetruecolor ($NWidth, $_SESSION['DHeight']);
   imagecopyresampled ($TImage, $Image, 0, 0, 0, 0, $NWidth, $_SESSION['DHeight'], $Width, 50);
   $Image = $TImage;
   }
imagepng ($Image);
imagedestroy ($Image);
?>

Następnie na początku zabezpieczanej strony wklejamy kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//======eVisualConfirm======
// Konfiguracja
$Chars = array_merge (range ('A', 'Z'), range ('1', '9')); // Zbiór znaków używanych w potwierdzeniu
$Length = 5; // Ilość znaków
$IgnoreCase = 1; // Ignorowanie rozmiaru znaków przy sprawdzaniu poprawności tekstu (1 - tak, 0 - nie)
$DestinationHeight = 0; // Ostateczna wysokość obrazka w pikselach (0 - domyślna, 50 pikseli)
$CharsNumbers = array (); // Numery wybranych znaków do przepisania, w podanej kolejności liczone od zera (array (2, 3, 1) - przepisz znak trzeci, czwarty i drugi; array () - przepisz wszystkie znaki w normalnej kolejności)
//===
session_start ();
$_SESSION['DHeight'] = $DestinationHeight;
if (isset ($_SESSION['e_VCText']) && isset ($_POST['e_VCText'])) {
   if ($CharsNumbers) {
      $VCText = '';
      for ($i = 0; $i < count ($CharsNumbers); $i++) $VCText.= $_SESSION['e_VCText'][$CharsNumbers[$i]];
      }
   else $VCText = $_SESSION['e_VCText'];
   define ('e_VC', (($IgnoreCase && strtoupper ($VCText) == strtoupper ($_POST['e_VCText'])) || (!$IgnoreCase && $VCText == $_POST['e_VCText']))?1:0);
   }
$_SESSION['e_VCText'] = '';
for ($i = 0; $i < $Length; $i++) $_SESSION['e_VCText'].= $Chars[mt_rand (0, count ($Chars) - 1)];
?>

Na stronie należy umieścić jeszcze znacznik IMG w tej postaci:

1
<img src="image.php" alt="Jeżeli nie widzisz tego obrazka kliknij odśwież i spróbuj ponownie" />

Oraz formularz z polem tekstowym z atrybutem name o wartości e_VCText.

Gdy użytkownik wpisze i wyśle kod, zostanie zdefiniowana stała e_VC. Jeśli kod będzie poprawny, będzie miała wartość 1, jeśli nie, 0.

Przykładowy kod strony:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
header ('Content-Type: text/html; charset=utf-8');
//======eVisualConfirm======
// Konfiguracja
$Chars = array_merge (range ('A', 'Z'), range ('1', '9')); // Zbiór znaków używanych w potwierdzeniu
$Length = 5; // Ilość znaków
$IgnoreCase = 1; // Ignorowanie rozmiaru znaków przy sprawdzaniu poprawności tekstu (1 - tak, 0 - nie)
$DestinationHeight = 0; // Ostateczna wysokość obrazka w pikselach (0 - domyślna, 50 pikseli)
$CharsNumbers = array (); // Numery wybranych znaków do przepisania, w podanej kolejności liczone od zera (array (2, 3, 1) - przepisz znak trzeci, czwarty i drugi; array () - przepisz wszystkie znaki w normalnej kolejności)
//===
session_start ();
$_SESSION['DHeight'] = $DestinationHeight;
if (isset ($_SESSION['e_VCText']) && isset ($_POST['e_VCText'])) {
   if ($CharsNumbers) {
      $VCText = '';
      for ($i = 0; $i < count ($CharsNumbers); $i++) $VCText.= $_SESSION['e_VCText'][$CharsNumbers[$i]];
      }
   else $VCText = $_SESSION['e_VCText'];
   define ('e_VC', (($IgnoreCase && strtoupper ($VCText) == strtoupper ($_POST['e_VCText'])) || (!$IgnoreCase && $VCText == $_POST['e_VCText']))?1:0);
   }
$_SESSION['e_VCText'] = '';
for ($i = 0; $i < $Length; $i++) $_SESSION['e_VCText'].= $Chars[mt_rand (0, count ($Chars) - 1)];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<head>
<title>eVisualConfirm</title>
</head><body>
<p>
<?= defined ('e_VC')?'Wynik testu: '.(e_VC?'poprawnie':'źle').'<br />
':'' ?><img src="image.php" alt="Jeżeli nie widzisz tego obrazka kliknij odśwież i spróbuj ponownie" />
</p>
<form action="" method="post"><div>
<input name="e_VCText" />
<input type="submit" value="Sprawdź" />
</div></form>
</body></html>

Instalacja dodatkowych tekstur i czcionek polega ni ich umieszczeniu odpowidnio w katalogach textures/ oraz fonts/.
Tekstury muszą być zapisane w formacie JPEG (rozszerzenie .jpg) oraz mieć wymiary 150 x 50 pikseli. Czcionki muszą być w formacie TTF.

Skrypt wymaga biblioteki GD.

Ostatnia aktualizacja: pitek 21.07.2006, 16:24

Aby do czegoś dojść, trzeba wyruszyć w drogę. Wiesław Czermak