Nội dung bài viết Sau một loạt bài viết về series - Con
đường trở thành kiến trúc sư đến nay thì tôi thấy lượt truy cập chỉ bằng 1/3 so với các bài viết về đề tài khác. Nhưng không sao, 1/3 đó là những bạn đã có tay nghề và có thể nói chuyên về backend giống như tôi. Và để đi trên con đường đó bạn phải trang bị cho mình nhiều vũ khí cũng như là phòng thủ để đảm bảo rằng, bạn đang là người được chọn để bảo vệ cho Doanh Nghiệp thuê bạn. Và để tiếp tục thì bài viết này sẽ đề cập tới một hướng dẫn giúp bạn hạn chế được những phần tử chọc ngoáy sâu xa
hơn nữa là tránh từ xa những cuộc tấn công DDoS. Có thể bạn sẽ tìm những bài viết này trong tương lai, và sự thật là rất ít người viết về đề tài này. Và tôi là trong số ấy. Đầu tiên để tôi nói về một bài viết mà anh ấy đã
hack thành công mật khẩu của instagram. Nó không phải là điều mới mẻ, do anh sử dụng request liên tục để nhằm lấy mã OTP khi sử dụng dịch vụ quên pass thông qua SMS. Bạn có thể đọc nó, nhưng không dễ như tiêu đề của bài viết.
Chính vì vậy, giới hạn request của người dùng cũng được sử dụng cho mục đích bảo mật, như ví dụ trên là phải ngăn chặn lượng request liên tục nhằm phán đoán. Ngoài ra nó có thể giúp bảo vệ chống lại các cuộc tấn công DDoS bằng cách giới hạn tỷ lệ yêu cầu đến url nào đó, và từ đó mình cũng xác định được mục tiêu URL nào được nhắm đến. Nói chung, chúng ta làm dưới hệ thống nhiệm vụ của chúng ta là phải ngăn chặn những điều đó xảy ra. Sơ sơ vậy thôi. Có nhiều cách để phòng chống điều này, 2 trong số cách phổ biến đó là sử dụng balancer và middleware. Ở bài viết này, chúng ta sẽ tìm hiểu cách chống nhiều request ở middleware. Ở bài trước tôi cũng đã nói về balancer nên ở đây sẽ không đề cập đến. Hiện tại thì nếu bạn sử dụng middleware thì có hai package có thể hỗ trợ chúng ta trong việc này đó là rate-limiter-flexible package và express-rate-limiter cho Express.js applications. Sử dụng Node.js app với rate-limiter-flexibleVà đây là ví dụ thực tế khi sử dụng
Bạn có thể đọc thêm tài liệu và trường hợp sử dụng tại đây. Express rate limiting
Bạn có thể đọc thêm tài liệu và trường hợp sử dụng tại đây. Ok vậy thôi, không khó, chẳng qua là không biết. Nếu biết mà không làm thì đồ hư đốn. Happy coding!!! Chào các bạn, lại là mình đây. Hôm nay mình xin giới thiệu tới các bạn một kỹ thuật rất hay ho và hữu ích đó là Rate Limiting 1. Rate Limiting là gì?Rate limiting được hiểu đơn giản là hạn chế (limit) lượng yêu cầu (request) tới server. Trên thực tế, người ta phải sử dụng 1 số thuật toán để đảm bảo chạy nhanh, chính xác mà lại ít tốn bộ nhớ. Giả sử như hệ thống của chúng ta nhận được hàng nghìn request nhưng mà trong số đó chỉ xử lí được trăm request/s chẳng hạn, và số request còn lại thì bị lỗi (do CPU hệ thống đang quá tải không thể xử lí được). Để giải quyết được vấn đề này thì cơ chế Rate Limiting đã ra đời. Mục đích của nó chỉ cho phép nhận 1 số lượng request nhất định trong 1 đơn vị thời gian. Nếu quá sẽ trả về response lỗi. 2. Lợi ích, ứng dụng thực tế
Có thể tìm hiểu thêm về tấn công DDOS Tại đây, Brute force password tại đây 3. express-rate-limitTrong NodeJS, ta có thể dễ dàng tạo ra Rate Limiting với express-rate-limit. Cài đặtNhư mọi thư viện khác, ta có thể cài đặt express-rate-limit với lệnh
UsageSau Khi tạo được một project. Ta có thể sử dụng express-rate-limit với một vài dòng như sau:
Ở ví dụ trên mình đã tạo Rate Limiting cho mỗi địa chỉ IP chỉ được truy cập tối đa 2 lần mỗi phút. Ta có thể kiểm tra bằng Postman
Hình đầu tiên là kết quả trả về khi ta truy cập đường dẫn lần đầu tiên. Hình thứ 2 là kết quả trả về khi truy cập lần thứ 3 trở đi trong vòng 1 phút so với request đầu tiên. Đơn giản qúa phải không nào? Rate limit options
Ngoài ra còn một số option khác bạn có thể xem chi tiết tại đây. Script testingĐể đơn giản hơn cho việc thử nghiệm code với số lượng request lớn và thời gian lớn hơn bạn có thể tham khảo script sau:
Script này sẽ request lên địa chỉ http://localhost:3000/ mỗi 1 giây. Bạn có thể tùy biến tùy theo mục đích. Lời kếtHy vọng bài viết này sẽ ít nhiều giúp ích cho các bạn. Trong bài viết còn nhiều thiếu sót, hy vọng được mọi người góp ý Tài liệu tham khảo:
|