“Làm thế nào để bảo vệ trang web của bạn khỏi tấn công DDoS và các yêu cầu độc hại?” Đó là một câu hỏi mà nhiều chủ sở hữu trang web đặt ra khi họ phải đối mặt với những cuộc tấn công ngày càng tinh vi và phức tạp. Một trong những biện pháp hiệu quả để đối phó với vấn đề này là sử dụng quy tắc .htaccess
trong Apache/LiteSpeed
Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách chặn tất cả các yêu cầu có định dạng domain.com/?query-string
bằng cách sử dụng quy tắc .htaccess
. Điều này giúp bạn ngăn chặn các yêu cầu độc hại và giữ cho trang web của bạn an toàn và ổn định.
Bằng cách áp dụng các quy tắc chặn yêu cầu độc hại trong Apache/LiteSpeed, bạn có thể xây dựng một hàng rào bảo mật mạnh mẽ và ngăn chặn các cuộc tấn công DDoS và các yêu cầu không mong muốn. Hãy cùng khám phá cách thức triển khai quy tắc .htaccess
để bảo vệ trang web của bạn và giữ cho nó hoạt động một cách bình thường.”
Trong ảnh bên dưới khách của tôi có 1 website bị tấn công theo dạng domain/?query-string
ngẫu nhiên, có đến cả trăm ngàn request dạng này làm tràn tài nguyên và không thể truy cập vào được web.
Xác định được vấn đề và điểm chung ở đây đa phần là /?query-string
và tôi sẽ chặn các request theo định dạng này. Bạn mở file .htaccess
sau đó thêm vào đoạn mã này, nếu file không tồn tại bạn có thể tạo mới file.
RewriteEngine On RewriteCond %{QUERY_STRING} . RewriteRule ^$ - [F]
Chú thích
Đoạn mã trên sử dụng quy tắc RewriteCond và RewriteRule trong Apache để chặn tất cả các yêu cầu có định dạng domain.com/?query-string
.
RewriteEngine On
: Dòng này bật modulemod_rewrite
trong Apache. Nó cho phép sử dụng các quy tắc RewriteCond và RewriteRule.RewriteCond %{QUERY_STRING} .
: Dòng này đặt một điều kiện (RewriteCond) cho quy tắc tiếp theo. Nó kiểm tra xem có tồn tại một query string (tham số truy vấn) hay không. Dấu chấm (.) trong mẫu regex biểu thị bất kỳ ký tự nào.RewriteRule ^$ - [F]
: Dòng này định nghĩa một quy tắc RewriteRule. Nó áp dụng cho URL gốc (^$
biểu thị URL không có đường dẫn) và kết quả là trả về mã lỗi 403 – Forbidden (F).
Các dòng mã trên kiểm tra xem có tồn tại một query string trong URL hay không. Nếu có, quy tắc RewriteRule sẽ được áp dụng và trả về lỗi 403, từ chối truy cập cho yêu cầu đó. Điều này giúp chặn các yêu cầu có định dạng domain.com/?query-string
.
Lưu ý: Cấu hình trên sẽ chặn các query-string đến từ Facebook và Google có định dạng /?fbclid=
& /?gad_source=
. Nếu web bạn có truy cập từ Facebook, Google ads và sản phẩm của woocommerce bạn hãy sử dụng cấu hình sau.
# Blocks QUERY_STRING RewriteEngine On RewriteCond %{QUERY_STRING} .+ RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{QUERY_STRING} !^(fbclid=.*|)$ [NC] RewriteCond %{QUERY_STRING} !^(gad_source=.*|)$ [NC] RewriteCond %{QUERY_STRING} !^(wc-ajax=.*|)$ [NC] RewriteCond %{QUERY_STRING} !^(zarsrc=.*|)$ [NC] RewriteRule ^ - [F]
Chú thích:
- RewriteCond %{QUERY_STRING} .+: Kiểm tra xem query string có ít nhất một ký tự hay không.
- RewriteCond %{REQUEST_URI} ^/$: Kiểm tra xem URL có là trang chủ (/) hay không.
- RewriteCond %{QUERY_STRING} !^(fbclid=.*|)$ [NC]: Kiểm tra xem query string không bắt đầu bằng fbclid= hoặc không rỗng.
Nếu tất cả các điều kiện này đều được thỏa mãn, quy tắc RewriteRule sẽ được áp dụng và trả về lỗi 403, chặn truy cập vào /?query-string.
Bây giờ quay lại trang web và kiểm tra. Khi tôi truy cập vào trang web và các định dạng url hợp lệ thì truy cập bình thường. Còn khi truy cập vào định dạng /?query-string
ngay lập tức trả về mã 403 tức bị từ chối truy cập.
Như vậy có nghĩa bạn đã chặn thành công các request xấu này.