Giải Trí & Công Nghệ

Chống Flood cho Website

S

s0ft4u

Thành viên VIP
Member
Flood là gì..có nhiều bạn sẽ hỏi vậy
Khi bạn thiết kế một FORM để nhập dữ liệu, thì bất kỳ ai cũng có thể view sources để xem cấu trúc HTML của FORM bạn thiết kế, vì vậy nếu site bạn không chống flood, hackers có thể dễ dàng flood site bạn, làm DB của bạn có thể bị tràn ngập và xuất hiện nhiều dữ liệu dư thừa...tức là có thể hiểu flood là làm tràn ngập dữ liệu
nói ngắn gọn cách thứ như sau,ở đây hướng dẫn sử dụng theo session

Tạo 1 file PHP tên là anti_flood.php, với code sau:
PHP:
<?php session_start(); $timeout = 60; $session_name = "action_time"; if ( isset($_SESSION["{$session_name}"]) && ( $_SESSION["{$session_name}"] >= time() - $timeout ) ) { print "Làm ơn đợi {$timeout} giây rồi quay lại kiếm tôi!!"; return false; } $_SESSION["{$session_name}"] = time(); ?>
Giải thích:
Dòng thứ 3 dùng session_start() để khởi động dữ liệu của session (Phiên làm việc).
Dòng kế tiếp là để thiết lập thời gian cho một session, mặc định là 60 giây.

Dòng tiếp theo là $session_name, đơn giản chỉ là đặt tên cho session.

Dòng tiếp theo nữa là để kiểm tra thời gian của phiên làm việc trước đó (nếu trước đó có một session đã thực hiện và session đó phải lớn hơn hoặc bằng thời gian hiện tại trừ cho thời gian thiết lập cho mổi session).

+ Điều đó có nghĩa là nếu session đã thực hiện trước đó (session thứ 1) chỉ cách session thứ 2 dưới 60 giây (đây là thời gian do bạn qui định: $timeout = 60) thì sẽ được xét vào dạng Flood data, và ngược lại thì sẽ cho qua và xác nhận hợp lệ.
Và dòng cuối cùng là thiết lập thời gian "hiện tại" cho session "hiện tại".

Có 2 cách để sử dụng đoạn code trên:

Cách 1: Load trực tiếp file anti_flood.php, áp dụng cho site có 1 FORM cần chống flood.
PHP:
<?php require_once("anti_flood.php"); ?>
Cách 2: Là copy trực tiếp đoạn code trên rồi sửa lại tên session để dễ phân biệt cho site có nhiều FORM cần chống flood:
PHP:
<?php require_once("anti_flood.php"); ?>
 
Bên trên