Chia Sẽ Kinh Nghiệm Về IT



Tìm Kiếm Với Google
-


Gởi Ðề Tài Mới  Gửi trả lời
 
Công Cụ Xếp Bài
Tuổi 24-07-2010, 10:26 PM   #1
hoctinhoc
Guest
 
Trả Lời: n/a
Giải pháp chống flood cho site
Giải pháp chống flood cho site



Flood hiểu nôm na có nghĩa là tràn ngập - Khi bạn thiết kế một FORM để nhập dữ liệu, thì bất kỳ ai cũng áo 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ốngflood, 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.

Thông thường thì trong khi thiết kế một FORM bất kỳ thì phải thoả mãn cấu trúc như sau:



Đoạn code trên sử method="post" có nghĩa là phương pháp lấy dữ liệu là POST, ngoài nó ra bạn còn có thể dùng GET để lấy dữ liệu.

Có thể hiểu nếu method="GET" là dùng nhập dữ liệu ngay trên thanh địa chỉ, điều này cũng khó kiểm soát dữ liệu vì hackers có thể trực tiếp flood qua đường này nếu như không chống flood.

Còn nếu method="POST" thì bắt buộc phải được nhập qua 1 FORM nhất định, hiện tại hầu hết các site điều thiết lập method là POST vì dễ dàng kiểm tra dữ liệu và nhất là phòng chống SQL injection vì ítcó hackers để ý đến các FORM lắm.

Có rất nhiều phương pháp để chống flood, tôi xin trình bày vài cách để bạn tham khảo: Sử dụng session, tạo 1 field trong table dùng trong việc lưu trữ IP của máy đang truy cập (Cách này hơi rắc rốinên tôi không trình bày ở đây).

Phương pháp chống flood bằng cách sử dụng SESSION:

1. Tạo FORM: Việc tạo một FORM để nhập dữ liệu không khó, nếu không biết tạo xin hỏi tại box khác vì box này chỉ dành tham khảo về bảo mật ứng dụng web thôi

2. Tạo 1 file PHP tên là anti_flood.php, với code sau:

  1. session_start();
  2. $timeout = 60;
  3. $session_name = "action_time";
  4. if ( isset($_SESSION["{$session_name}"]) && ( $_SESSION["{$session_name}"] >= time() - $timeout ) )
  5. {
  6. print "Làm ơn đợi {$timeout} giây rồi quay lại kiếm tôi!!";
  7. return false;
  8. }
  9. $_SESSION["{$session_name}"] = time();
  10. ?>
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ậpcho 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ó ít FORM cần chống flood.


  1. require_once("anti_flood.php");
  2. ?>
Cách 2: Là copy trực tiếp đoạn code của tôi 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:


  1. require_once("anti_flood.php");
  2. ?>



  Trả lời ngay kèm theo trích dẫn này
Gửi trả lời



Quyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Hình Cảm xúc đang Mở
[IMG] đang Mở
Mã HTML đang Tắt




Bây giờ là 11:47 PM. Giờ GMT +7



Diễn đàn tin học QuantriNet
quantrinet.com | quantrimang.co.cc
Founded by Trương Văn Phương | Developed by QuantriNet's members.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.