2017-11-01 36 views
19

Khi làm việc với Firebase (chức năng đám mây Firebase trong trường hợp này), chúng tôi phải trả tiền cho mỗi byte băng thông. Vì vậy, tôi tự hỏi làm thế nào chúng ta có thể đối phó với trường hợp mà một người nào đó bằng cách nào đó tìm ra điểm cuối của chúng tôi sau đó liên tục yêu cầu cố ý (bởi một kịch bản hoặc công cụ)?Chức năng đám mây Firebase: cách xử lý yêu cầu liên tục

Tôi đã thực hiện một số tìm kiếm trên internet nhưng không thấy bất kỳ điều gì có thể hữu ích. Ngoại trừ this one nhưng không thực sự hữu ích.

Trả lời

7

Vì bạn không chỉ định loại yêu cầu nào, tôi sẽ giả định rằng bạn có nghĩa là http (s) -triggers trên các chức năng đám mây của firebase.

Có nhiều giới hạn bạn có thể đặt để 'giảm' băng thông được tiêu thụ theo yêu cầu. Tôi sẽ viết một vài mà nói đến cái tâm của tôi

1) Hạn chế các loại yêu cầu

Nếu tất cả bạn cần là GET và nói ví dụ như bạn không cần PUT bạn có thể bắt đầu bằng cách trả lại 403 cho những thứ đó, trước khi bạn đi xa hơn nữa trong chức năng đám mây của bạn.

if (req.method === 'PUT') { res.status(403).send('Forbidden!'); } 

2) Xác thực nếu bạn có thể

Follow Google's example here và chỉ cho phép người dùng được phép sử dụng thiết bị đầu cuối https. Bạn chỉ có thể đạt được điều này bằng cách xác minh mã thông báo like this SOF answer đến this question.

3) Kiểm tra nguồn gốc

Bạn có thể thử kiểm tra nguồn gốc của các yêu cầu trước khi đi bất kỳ hơn nữa trong chức năng điện toán đám mây của bạn. Nếu tôi nhớ chính xác, các chức năng đám mây cho phép bạn truy cập đầy đủ vào các đối tượng Yêu cầu/Trả lời HTTP để bạn có thể đặt các tiêu đề CORS thích hợp và phản hồi các yêu cầu OPTIONS trước chuyến bay.

Idea nghiệm 1

Bạn giả thuyết có thể đặt các chức năng của bạn đằng sau một load balancer/firewall, và rơ le-kích hoạt chúng. Nó sẽ ít nhiều đánh bại mục đích của tính năng mở rộng của các chức năng đám mây, nhưng nếu một hình thức DoS là mối quan tâm lớn hơn cho bạn hơn khả năng mở rộng, thì bạn có thể thử tạo một rơle công cụ ứng dụng, đặt nó sau bộ cân bằng tải/tường lửa và xử lý bảo mật ở lớp đó.

Idea nghiệm 2

Bạn có thể thử sử dụng các giải pháp tấn công ngăn ngừa mức DNS để vấn đề của bạn bằng cách đặt một cái gì đó giống như CloudFlare ở giữa. Sử dụng CNAME và Cloudflare Page Rules để ánh xạ URL tới các chức năng đám mây của bạn. Điều này có thể giả thuyết hấp thụ tác động.Như thế này:

*function1.mydomain.com/* ->https://us-central1-etc-etc-etc.cloudfunctions.net/function1/$2

Bây giờ nếu bạn đi đến

http://function1.mydomain.com/?something=awesome

bạn thậm chí có thể vượt qua params URL để chức năng của mình. Một chiến thuật mà tôi đã đọc về in this medium article trong mùa hè khi tôi cần một cái gì đó tương tự.

Cuối cùng

Trong một nỗ lực để làm cho những câu hỏi trên SOF liên kết hơn, và giúp mọi người tìm câu trả lời, here's câu hỏi khác tôi thấy rằng tương tự như trong tự nhiên. Liên kết ở đây để những người khác cũng có thể tìm thấy nó.

+0

Cảm ơn câu trả lời của bạn. Tôi đã làm tất cả ngoại trừ Cloudfare, cảm ơn vì điều đó. Vì vậy, cuối cùng chúng ta cần phải cẩn thận về tính toán chi phí cho từng bye, yêu cầu để bảo vệ ourself cho bây giờ. –

+0

@ LạngHoàng Rất vui được! :) Tôi vẫn sẽ làm toán, và xem nó dẫn đến đâu. Nó vẫn có thể là giá trị kiểm tra giá của Cloudflare và so sánh đó là tốt. Trong trường hợp rất cụ thể, đám mây có thể sẽ rẻ hơn. – johnozbay

2

Có một giải pháp cho vấn đề này, nơi bạn có thể xác minh điểm cuối https.

Chỉ những người dùng vượt qua mã thông báo ID Firebase hợp lệ làm mã thông báo Vòng đệm trong tiêu đề Cấp phép của yêu cầu HTTP hoặc cookie __session được phép sử dụng chức năng.

Kiểm tra mã thông báo ID được thực hiện bằng phần mềm trung gian ExpressJs cũng chuyển mã thông báo ID đã giải mã trong đối tượng Yêu cầu Express.

Kiểm tra this mã mẫu từ firebase.

+0

Thật dễ dàng để xác minh và tôi biết cách thực hiện nhưng rất nhiều trường hợp chúng tôi cần cung cấp điểm cuối công cộng thì mọi người đều có thể sử dụng. Vấn đề là làm thế nào để đối phó với một người muốn tấn công chúng tôi. –

Các vấn đề liên quan