SỐ 73
ĐỌC XONG VỌC LIỀN

"Chống ngập" cho Website

Hiện nay một số Website trên mạng thường xuyên bị ngập (flood). Đó là trường hợp các diễn đàn, các Website động có dùng cơ sở dữ liệu (database) để lưu thông tin nhận được từ các biểu mẫu. Website bị ngập do kẻ phá hoại liên tiếp gởi thông tin bá láp vào biểu mẫu đăng ký (hoặc biểu mẫu tiếp nhận nội dung) của Website nhiều lần. Đó là dữ liệu ngẫu nhiên, không trùng lắp nhằm gây nên tình trạng “ngập lụt” cho cơ sở dữ liệu của Website ấy.

Khi bị ngập, số mẩu tin (record) của cơ sở dữ liệu tăng vọt (trong một phút, cơ sở dữ liệu có thể nhận hàng trăm mẩu tin rác). Dữ liệu vô giá trị tràn ngập buộc người quản trị phải mất công xóa dữ liệu liên tục. Cơ sở dữ liệu có nguy cơ bị hỏng. Trong bài này, tôi xin trình bày một giải pháp chống ngập cho Website.

Cách thức làm ngập

Muốn chống phá hoại trước hết ta phải hiểu cách thức phá hoại. Hình 1 minh họa mô hình đăng ký thông thường, được dùng ở phần lớn Website. Theo đó bạn thấy có một trang cho người dùng nhập thông tin đăng ký (khâu A). Khâu tiếp theo (khâu B) là khâu tiếp nhận thông tin đăng ký và lưu vào cơ sở dữ liệu.

Cách thức làm ngập được minh họa ở hình 2. Kẻ phá hoại dùng chương trình gởi dữ liệu rác nhiều lần (bằng vòng lặp) vào khâu B, bỏ qua biểu mẫu đăng ký. Nhờ vậy dữ liệu rác ào ạt "chảy" vào cơ sở dữ liệu.

Cách thức chống ngập

Cách chống ngập đơn giản nhất là hạn định thời gian giữa hai lần tiếp nhận dữ liệu. Nghĩa là phải sau một khoảng thời gian nhất định nào đó thì mới cho chèn (insert) dữ liệu vào cơ sở dữ liệu. Cách này thực ra chỉ làm chậm hiện tượng ngập chứ không chống ngập được. Chẳng hạn, nếu ta quy định ít nhất sau 30 giây mới cho chèn dữ liệu vào thì sau 30 giây cơ sở dữ liệu có thể nhận thêm một mẩu tin nữa do chương trình phá hoại gửi đến. Số mẩu tin vẫn cứ tăng "vô tội vạ", không ngăn chặn được.

Hình 3 minh họa một giải pháp khác, có hiệu quả hơn nhiều:

1. Tại trang nhập thông tin đăng ký (khâu A), ta tạo một biến Session C (biến biểu diễn một phiên giao dịch) có giá trị là 1.

2. Ở khâu B, khi nhận thông tin đăng ký từ trang A, ta kiểm tra như sau. Nếu biến Session C có trị bằng 1, ta chèn dữ liệu nhận từ trang A vào cơ sở dữ liệu rồi huỷ luôn biến Session C. Bằng không thì quay trở lại trang A.

Đoạn mã 1

 

If Session(C) = 1 Then

  Thực thi câu lệnh SQL để chèn

  dữ liệu vào cơ sở dữ liệu

 

  Huỷ Session(C)

Else

   Trở lại trang A

End If

Đoạn mã 1 trình bày rõ hơn giải thuật xử lý ở khâu B. Bạn thấy đó, nếu không mở trang A thì biến Session rỗng, do đó không thể chèn dữ liệu vào cơ sở dữ liệu. Mong rằng ý tưởng này sẽ giúp bạn chống ngập cho Website hoặc diễn đàn của mình.

Nguyễn Ngọc Tuấn

Email: ngtuan253@yahoo.com

[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn