|
ĐỌ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 |
|
|