NỘI DUNG
Query string là một phần của URL, được đặt sau dấu ? và có thể chứa một hoặc nhiều cặp key-value. Query string thường được sử dụng để truyền dữ liệu lên server, chẳng hạn như dữ liệu phân tích, dữ liệu quảng cáo, v.v.
Trong một số trường hợp, bạn có thể cần phải chặn các request có định dạng ?query-string trên NGINX. Ví dụ, bạn có thể muốn chặn các request có chứa các key-value cụ thể hoặc các request có độ dài vượt quá một giới hạn nhất định.
Trong bài viết này, chúng ta sẽ tìm hiểu cách chặn các request có định dạng ?query-string trên NGINX bằng cách sử dụng các phương pháp Sử dụng directive if.
Định nghĩa các khái niệm
Trước khi bắt đầu, chúng ta cần hiểu một số khái niệm cơ bản sau:
- URI: URI (Uniform Resource Identifier) là một định danh duy nhất cho một tài nguyên trên internet. URI bao gồm URL và URN.
- URL: URL (Uniform Resource Locator) là một loại URI được sử dụng để định vị một tài nguyên trên internet. URL thường được biểu diễn dưới dạng chuỗi ký tự bắt đầu bằng http:// hoặc https://.
- Query string: Query string là một phần của URL, được đặt sau dấu ? và có thể chứa một hoặc nhiều cặp key-value.
Sử dụng directive if
Directive if cho phép bạn kiểm tra một điều kiện và thực hiện một hành động nếu điều kiện đó là đúng. Để chặn các request có định dạng ?query-string, bạn có thể sử dụng directive if để kiểm tra xem URI có chứa query string hay không.
Ví dụ như bên dưới một website đang bị tấn động, điểm chung ở đây là phần HEAD đều dưới dạng /?s=plfxdk=difn
Bây giờ tôi sẽ Sử dụng directive if để chặn các request này.
Chặn các request dạng /?s=query-string
Bạn hãy mở cấu hình vhost của domain và thêm vào đoạn sau. Chỉ thêm các dòng màu đỏ thôi nhé.
server {
# Các thiết lập khác ở đây
if ($args ~* ^s=) {
return 403;
}
# Các cấu hình khác ở đây
}
Và đây là kết quả sau khi chặn
Chặn các request dạng /?query-string
Tương tự như trên bạn hãy mở vhost của tên miền và thêm vào đoạn sau
server {
# Các thiết lập khác ở đây
if ($args ~* "^\d+$") {
return 403;
}
# Các cấu hình khác ở đây
}