Một kỹ thuật xây dựng chống Spam trong PHP


Khi chúng ta xây dựng bất kỳ một form dùng để giao tiếp với người dùng.Điều lo lắng nhất lại chính là sợ bị kẻ khác flood data. Khiến apachevà mysql bị tê liệt. Do đó việc xây dựng 1 hệ thống chống spam được xem à 1 yêu cầu thiết yếu.
Nếu các bạn học lớp thiết kế web động cho doanh nghiệp thì các bạn đãđược giới thiệu qua kỹ thuật sử dụng captcha để làm dãy số random. Thìđối với lập trình chúng ta sẽ xây dựng bằng cách nào ?.
Giải thuật: ở đây tôi sử dụng kỹ thuật kết hợp với database để làm điều đó.

Đầu tiên các bạn tạo database với cú pháp sau:
Trích:

CREATE TABLE antispam (
anti_code varchar(10) NOT NULL default ”,
anti_time int(11) NOT NULL default ‘0’
) TYPE=MyISAM;


Với database này chúng ta thấy rằng có 2 table. 1 cái làanti_code dùng để lưu mã code random. 1 table là anti_time dùng để lưuthời gian phát sinh mẫu code random đó.
Sau đó các bạn chèn vào trang cần xác thực kỹ tự đoạn code sau:
PHP Code:

<?
$chars
= array( ‘a’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’,‘N’,‘O’,‘P’,
‘Q’,‘R’,‘S’,‘T’,‘U’,‘V’,‘W’,‘X’, ‘Y’, ‘Z’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’);
$max_chars = count($chars) – 1;
$temp = “”;
$insert_code = “”;
for(
$i = 0; $i < 7; $i++)
for(
$i = 0; $i < 7; $i++)
{
$temp = rand(0, $max_chars);
$insert_code = ( $i == 0 ) ? $chars[$temp] : $insert_code . $chars[$temp];
$secure_code = ( $i == 0 ) ? $chars[$temp] : $secure_code . ” ” . $chars[$temp];
}
$secure_code = “<b><font color=red>” . $secure_code . “</font></b>”;
$del_time = time() – 120;//20s
$ds=“DELETE FROM antispam WHERE anti_time < $del_time”;
mysql_query($ds,$connect);
$ds1=“insert into antispam(anti_code,anti_time) values(‘”.$insert_code.“‘,”.time().“)”;
mysql_query($ds1,$connect);
?>



==>Ở trên chúng ta thấy rằng 2 vòng lặp for dùng để phát sinh code random.
Và chúng ta chạy 2 query 1 dùng để xóa record và 1 dùng để insert record

sau đó chúng ta chỉ việc insert code vào chỗ nào cần thiết :
bằng đoạn code sau :
PHP Code:

<?=$secure_code?>



Giờ, chúng ta giải quyết vấn đề ở trang xử lý thông tin như thế nào ?.
Chúng ta sẽ kiểm tra xem, đoạn code mà người sử dụng nhập vào có đúng với thông tin mà chúng ta lưu trong database hay không.
Giả sử ở đây tôi có biến $antilà gí trị lấy được từ form nhập. Tôi sẽ có như sau:
PHP Code:

<?php   $anti=$_POST[‘anticode’]; //Lấy giá trị anticode tôi đã lưu trong database để so sánh
$ds1=“select * from antispam where anti_code='”.$anti.“‘”;
$rs1=mysql_query($ds1,$connect);
if(
mysql_num_rows($rs1)== “”)
{
$msg=“Anti spammer key không chính xác.”;
}
else
{
//Sau khi kiểm tra đúng. Chúng ta delele record trên.
$ds2=“delete from antispam where anti_code='”.$a.“‘”;
$rs2=mysql_query($ds2,$connect);
//tại đây bạn có thể làm gì đó sau khi đã xác thực xong.?>



Như vậy chúng ta thấy rằng, việc sử dụng đoạn code trên có thể giảm thiểu được bị các hacker spam dữ liệu.
Nào, bây giờ các bạn hãy cùng thực tập xem sao nhé.

Theo ddtinhoc (kenny)

Advertisements
By dbglory Posted in PHP

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s