Professional Documents
Culture Documents
Bài 15 Viết ứng dụng tạo mã xác nhận Captcha bằng PHP
Bài 15 Viết ứng dụng tạo mã xác nhận Captcha bằng PHP
vic xy dng h thng thm, sa, xa v qun l user. Trong bi ny, chng ta tip tc tm
hiu phng php to dy s ngu nhin chng tn cng flood d liu. Hoc ai c
tnh spam khin c s d liu ca chng ta khng th x l tip c.
Trc tin, chng ta tin hnh to form HTML n gin thc thi thao tc nhp liu nh
sau:
<f orm action="f orm.php" method
<table>
<tr>
<td align="lef t">
<label f or="captcha">Captcha
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form action="form.php" method=post>
<table>
<tr>
<td align="left">
<label for="captcha">Captcha</label>
</td>
<td>
<input type="text" name="txtCaptcha" maxlength="10" size="32" />
</td>
<td>
<img src="random_image.php" />
</td>
</tr>
<tr>
<td> </td>
<td>
<input type=submit name=ok value="Check" />
</td>
</tr>
</table>
</form>
Chng ta ch phn hnh nh, ti y ti truyn ng dn chnh l lin kt ti trang
random_image.php. Trang ny s thc thi cng vic to ra nhng bc hnh c dy s
ngu nhin phn nhp liu ca ngi s dng tham chiu ti.
Tip theo, chng ta khi to file random_image.php ly ra dy s ngu nhin v pht
sinh chng ngay trn tm hnh cho ngi truy cp nhp liu.
lm c iu . Chng ta s khi to session v lu dy s nhp liu vo session
ca mnh, sau so khp vi trang form bn kia.(xem li bi 7: Khi nim c bn v
cookie v session trong PHP)
u tin chng ta s dng hm md5 v ran m ha cc k t bao gm s v ch ci.
Khi s dng hm md5() k t pht sinh s ln ti 32 k t. V chng ta ch ly duy nht 5
k t t chui m ha bng hm substr. Tip tc ta lu on m ha ny trong session
c th $_SESSION['security_code'], ti trang form ta s s dng so snh vi phn
nhp liu ca ngi s dng.
Vy nn on code di s gii quyt cc tnh hung ny:
<?php
$md5_hash = md5(rand(0,999))
$security_code = substr($md5_
$_SESSION["security_code"] =
?>
1
2
3
4
5
<?php
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION["security_code"] = $security_code;
?>
K n ta khi to tm hnh vi chiu rng v chiu cao m ta thit lp thng qua hm
ImageCreate(). V tip tc khai bo 2 mu chnh l trng v en bng hm
ImageColorAllocate($image, red, green, blue ). Hm ny s to ra mt mu sc t h
mu RGB trn tm hnh m chng ta va khi to.
Tip tc ta background ca tm hnh s l mu en v ch xut hin trn tm hnh s l
mu trng bng hm ImageFill() v hm ImageString(). Hm ImageString c mt s i
s c bn nh sau: ImageString($image, 5, 30, 6, $security_code, $white); Trong :
+ $image l hnh m chng ta khi to.
+ 5: l font-size m chng ta quy c cho k t xut hin trn hnh.
+ 30: l khong cch bn tri ca tm hnh.
+ 6 : l khong cch t trn ca tm hnh.
+ $security_code: l on code sau khi chng ta ct ra trn.
+ $white: l mu sc m chng ta s dng hm ImageColorAllocate() trn khi to
ra mu trng.
<?php
$width = 100;
$height = 30;
$image = ImageCreate($width, $
$white = ImageColorAllocate($im
1
2
3
4
5
6
7
8
9
<?php
$width = 100;
$height = 30;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageFill($image, 0, 0, $black);
ImageString($image, 5, 30, 6, $security_code, $white);
?>
K ti chng ta s s dng lnh header tr ni dung ny tr v d liu dng hnh. V
tin hnh khi to nh dng cho file hnh m chng ta va to l JPG ng thi gii phng
hnh tm c s dng khi to ra tm hnh ny bng on code sau:
<?php
header("Content-Type: image/jp
ImageJpeg($image);
ImageDestroy($image);
?>
1
2
3
4
5
<?php
header("Content-Type: image/jpeg");
ImageJpeg($image);
ImageDestroy($image);
?>
d qun l chng ta s t tt c on code trn vo trong 1 hm d s dng v qun
l chng tt hn. Vy ton b on code trong trang random_image.php ny nh sau.
<?php
session_start();
f unction create_image()
{
$md5_hash = md5(rand(0,999)
1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
function create_image()
{
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION["security_code"] = $security_code;
$width = 100;
$height = 30;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
13
14
15
16
17
18
19
20
21
ImageFill($image, 0, 0, $black);
ImageString($image, 5, 30, 6, $security_code, $white);
header("Content-Type: image/jpeg");
ImageJpeg($image);
ImageDestroy($image);
}
create_image() ;
exit();
?>
Tip tc, trong trang form chng ta phi khi to session chng nhn c cc gi tr
m ta khi to v s dng trang random_image, k ti ta kim tra xem ngi dng
c nhn submit cha.
Nu c ta s tip tc kim tra xem ngi dng nhp vo textbox c ng l dy s hin th
trn hnh nh hay khng. V xut ra thng bo tng ng vi ni dung ca ngi nhp
liu. (xem li bi 4: X l gi tr form trong PHP)
Sau y l ton b code ca trang form.php:
<?php
session_start();
if (isset($_POST['ok']))
{
if ($_POST['txtCaptcha'] == NUL
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
<?php
session_start();
if(isset($_POST['ok']))
{
if($_POST['txtCaptcha'] == NULL)
{
echo "Please enter your code";
}
else
{
if($_POST['txtCaptcha'] == $_SESSION['security_code'])
{
echo "ma lenh hop le";
}
else
{
echo "Ma lenh khong hop le";
}
}
}
?>
<form action="form.php" method=post>
<table>
<tr>
<td align="left">
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<label for="captcha">Captcha</label>
</td>
<td>
<input type="text" name="txtCaptcha" maxlength="10" size="32" />
</td>
<td>
<img src="random_image.php" />
</td>
</tr>
<tr>
<td> </td>
<td>
<input type=submit name=ok value="Check" />
</td>
</tr>
</table>
</form>
Download ton b source code ny ti y.
Tng kt:
Qua bi hc ny, chng ta hiu c nguyn tc x l v nhng hm c bn m 1 h
thng khi s dng captcha cn phi vn dng nh th no. V tt nhin hm x l captcha
ny cng ch mang kin trc tng i.
tng cng tnh bo mt hn, cc bn nn s dng 1 s hm chuyn dng nhm m ha
hoc gy ni dung kh nhn hn chn cc tools hoc cc h thng bot c th qua mt
thng s ny.