Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Danh sách kiểm tra bảo mật của Firebase

Để bảo mật tài nguyên Firebase và dữ liệu của người dùng, hãy làm theo các nguyên tắc sau. Không phải mọi mục nhất thiết sẽ áp dụng cho các yêu cầu của bạn, nhưng hãy ghi nhớ chúng khi bạn phát triển ứng dụng của mình.

Tránh lưu lượng truy cập lạm dụng

Thiết lập giám sát và cảnh báo cho các dịch vụ phụ trợ

Để phát hiện giao thông lạm dụng, chẳng hạn như (DOS) tấn công từ chối-of-dịch vụ, thiết lập giám sát và cảnh báo cho đám mây FireStore , Cơ sở dữ liệu thời gian thực , Cloud Storage , và Hosting

Nếu bạn nghi ngờ một cuộc tấn công vào ứng dụng của bạn, tiếp cận với những hỗ trợ càng sớm càng tốt để cho họ biết những gì đang xảy ra.

Bật Kiểm tra ứng dụng

Để giúp đảm bảo chỉ các ứng dụng của bạn có thể truy cập vào các dịch vụ phụ trợ của bạn, cho phép ứng dụng kiểm tra cho mỗi dịch vụ mà hỗ trợ nó.

Định cấu hình Chức năng đám mây của bạn để mở rộng quy mô cho lưu lượng truy cập bình thường

Chức năng Đám mây tự động mở rộng quy mô để đáp ứng nhu cầu của ứng dụng của bạn, nhưng trong trường hợp xảy ra tấn công, điều này có thể có nghĩa là một hóa đơn lớn. Để tránh điều này, bạn có thể hạn chế số lượng các trường hợp đồng thời của một hàm dựa trên lưu lượng bình thường đối với ứng dụng của bạn.

Thiết lập cảnh báo để được thông báo khi gần đạt đến giới hạn

Nếu dịch vụ của bạn có yêu cầu tăng đột biến, thường thì hạn ngạch sẽ tăng và tự động điều chỉnh lưu lượng truy cập vào ứng dụng của bạn. Hãy chắc chắn để theo dõi của bạn Cách sử dụng và bảng điều khiển thanh toán , nhưng bạn cũng có thể thiết lập cảnh báo ngân sách cho dự án của bạn sẽ được thông báo khi sử dụng tài nguyên được vượt quá sự mong đợi.

Ngăn chặn self-DOS: kiểm tra các chức năng cục bộ bằng trình giả lập

Có thể dễ dàng vô tình tự DOS trong khi phát triển Chức năng đám mây: ví dụ: bằng cách tạo vòng lặp ghi kích hoạt vô hạn. Bạn có thể ngăn ngừa những sai lầm từ ảnh hưởng đến dịch vụ trực tiếp bằng cách thực hiện phát triển của bạn với bộ giả lập căn cứ hỏa lực .

(Và nếu bạn làm vô tình DOS mình, undeploy chức năng của bạn bằng cách loại bỏ nó từ index.js sau đó chạy firebase deploy --only functions .)

Trong trường hợp khả năng phản hồi theo thời gian thực ít quan trọng hơn, cấu trúc chức năng phòng thủ

Nếu bạn không cần phải trình bày các kết quả của một hàm theo thời gian thực, bạn có thể chống lại giao thông lạm dụng bằng cách xử lý kết quả theo lô: công bố kết quả vào một Pub / Sub chủ đề, và xử lý các kết quả đều đặn với một chức năng dự kiến .

Hiểu các khóa API

Khóa API cho các dịch vụ Firebase không phải là bí mật

Phím sử dụng API căn cứ hỏa lực chỉ để xác định dự án căn cứ hỏa lực của ứng dụng của bạn với các dịch vụ căn cứ hỏa lực, và không kiểm soát truy cập vào cơ sở dữ liệu hoặc dữ liệu Cloud Storage, được thực hiện sử dụng Quy định an toàn căn cứ hỏa lực . Vì lý do này, bạn không cần coi các khóa API cho các dịch vụ Firebase là bí mật và bạn có thể nhúng chúng vào mã máy khách một cách an toàn. Tìm hiểu thêm về khóa API cho căn cứ hỏa lực .

Thiết lập phạm vi khóa API

Như một biện pháp bổ sung đối với một kẻ tấn công cố gắng sử dụng khóa API của bạn để yêu cầu giả mạo, bạn có thể tạo phím API scoped cho khách hàng ứng dụng của bạn .

Giữ bí mật các khóa máy chủ FCM

Phím API Không giống như các dịch vụ căn cứ hỏa lực, phím máy chủ FCM (sử dụng bởi các di sản FCM HTTP API ) rất nhạy cảm và phải được giữ bí mật.

Giữ bí mật các khóa tài khoản dịch vụ

Cũng không giống như các phím API cho các dịch vụ căn cứ hỏa lực, dịch vụ chiếm khóa riêng (được sử dụng bởi SDK quản trị ) rất nhạy cảm và phải được giữ bí mật.

Quy tắc bảo mật

Khởi tạo các quy tắc trong chế độ sản xuất hoặc bị khóa

Khi bạn thiết lập Cloud Firestore, Cơ sở dữ liệu thời gian thực và Lưu trữ đám mây, hãy tinh chỉnh các quy tắc bảo mật của bạn để từ chối tất cả quyền truy cập theo mặc định và thêm các quy tắc cấp quyền truy cập vào các tài nguyên cụ thể khi bạn phát triển ứng dụng của mình.

Đây là một trong những cài đặt mặc định cho các phiên bản mới của Cloud Firestore (chế độ sản xuất) và Cơ sở dữ liệu thời gian thực (chế độ bị khóa). Chọn tùy chọn này khi thiết lập một phiên bản cơ sở dữ liệu mới.

Đối với Lưu trữ đám mây, hãy bắt đầu với cấu hình quy tắc bảo mật như sau:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Các quy tắc bảo mật là một lược đồ; thêm quy tắc khi bạn thêm tài liệu

Không viết các quy tắc bảo mật sau khi bạn viết ứng dụng, như một loại nhiệm vụ trước khi khởi chạy. Thay vào đó, hãy viết các quy tắc bảo mật khi bạn viết ứng dụng của mình, coi chúng như một lược đồ cơ sở dữ liệu: bất cứ khi nào bạn cần sử dụng loại tài liệu hoặc cấu trúc đường dẫn mới, hãy viết quy tắc bảo mật của nó trước.

Các quy tắc bảo mật kiểm tra đơn vị với Bộ giả lập; thêm nó vào CI

Để đảm bảo nguyên tắc bảo mật của bạn đang bắt kịp với sự phát triển của ứng dụng, đơn vị kiểm tra quy tắc của bạn với bộ giả lập căn cứ hỏa lực và thêm các xét nghiệm để đường ống CI của bạn. Xem các hướng dẫn cho đám mây FireStoreCơ sở dữ liệu thời gian thực .

Xác thực

Xác thực tùy chỉnh: các JWT đúc kết từ môi trường đáng tin cậy (phía máy chủ)

Nếu bạn đã có hệ thống đăng nhập an toàn, cho dù là hệ thống tùy chỉnh hay dịch vụ của bên thứ ba, bạn có thể sử dụng hệ thống hiện có của mình để xác thực với các dịch vụ Firebase. Tạo JWTs tùy chỉnh từ một môi trường đáng tin cậy, sau đó vượt qua các thẻ để khách hàng của bạn, trong đó sử dụng các dấu hiệu để xác thực ( iOS , Android , Web , Unity , C ++ ).

Đối với một ví dụ về sử dụng xác thực tùy chỉnh với một nhà cung cấp bên thứ ba, xem bài đăng blog, Authenticate với căn cứ hỏa lực sử dụng Okta .

Xác thực được quản lý: Các nhà cung cấp OAuth 2.0 là an toàn nhất

Nếu bạn sử dụng các tính năng xác thực được quản lý của Firebase, các tùy chọn nhà cung cấp OAuth 2.0 / OpenID Connect (Google, Facebook, v.v.) là an toàn nhất. Bạn nên hỗ trợ một hoặc nhiều nhà cung cấp này nếu có thể (tùy thuộc vào cơ sở người dùng của bạn).

Xác thực mật khẩu email: đặt hạn ngạch chặt chẽ cho điểm cuối đăng nhập để ngăn chặn các cuộc tấn công bạo lực

Nếu bạn sử dụng dịch vụ xác thực email-mật khẩu quản lý căn cứ hỏa lực của, thắt chặt các hạn ngạch mặc định của identitytoolkit.googleapis.com điểm cuối để ngăn chặn các cuộc tấn công brute force. Bạn có thể làm điều đó từ trang của API trong Google Cloud Bảng điều khiển .

Nâng cấp lên Nền tảng nhận dạng đám mây để xác thực đa yếu tố

Để bảo mật thêm về đăng nhập, bạn có thể thêm hỗ trợ xác thực đa yếu tố bằng cách nâng cấp lên đám mây nhận dạng vBulletin . Mã xác thực Firebase hiện có của bạn sẽ tiếp tục hoạt động sau khi bạn nâng cấp.

Xác thực ẩn danh

Chỉ sử dụng xác thực ẩn danh để giới thiệu ấm áp

Chỉ sử dụng xác thực ẩn danh để lưu trạng thái cơ bản cho người dùng trước khi họ thực sự đăng nhập. Xác thực ẩn danh không thay thế cho đăng nhập của người dùng.

Chuyển đổi người dùng sang một phương thức đăng nhập khác nếu họ muốn có dữ liệu khi mất điện thoại

Dữ liệu xác thực ẩn danh sẽ không tồn tại nếu người dùng xóa bộ nhớ cục bộ hoặc chuyển đổi thiết bị. Nếu bạn cần phải kiên trì dữ liệu ngoài khởi động lại ứng dụng trên một thiết bị duy nhất, chuyển đổi người dùng đến một tài khoản vĩnh viễn .

Sử dụng các quy tắc bảo mật yêu cầu người dùng chuyển đổi thành nhà cung cấp dịch vụ đăng nhập hoặc đã xác minh email của họ

Bất kỳ ai cũng có thể tạo tài khoản ẩn danh trong dự án của bạn. Với ý nghĩ đó, bảo vệ tất cả dữ liệu ngoài công lập với quy tắc bảo mật yêu cầu đăng nhập cụ thể phương pháp hoặc địa chỉ email xác nhận .

Ví dụ:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Quản lý môi trường

Thiết lập các dự án phát triển và dàn dựng

Thiết lập các dự án Firebase riêng biệt để phát triển, dàn dựng và sản xuất. Không hợp nhất mã khách hàng vào sản xuất cho đến khi nó được thử nghiệm với dự án dàn dựng.

Giới hạn quyền truy cập của nhóm vào dữ liệu sản xuất

Nếu bạn làm việc với một đội ngũ lớn hơn, bạn có thể giảm thiểu những hậu quả của sai lầm và vi phạm bằng cách hạn chế quyền truy cập vào dữ liệu sản xuất sử dụng một trong hai vai trò xác định trước hoặc vai trò tùy chỉnh IAM.

Nếu nhóm của bạn sử dụng bộ giả lập để phát triển, bạn có thể không cần cấp quyền truy cập rộng hơn vào dự án sản xuất.

Quản lý thư viện

Đề phòng lỗi chính tả của thư viện hoặc những người bảo trì mới

Khi thêm thư viện vào dự án của bạn, hãy chú ý đến tên của thư viện và những người bảo trì nó. Một thư viện có tên tương tự với thư viện bạn định cài đặt có thể chứa mã độc hại.

Không cập nhật thư viện mà không hiểu các thay đổi

Xem qua nhật ký thay đổi của bất kỳ thư viện nào bạn sử dụng trước khi nâng cấp. Đảm bảo nâng cấp thêm giá trị và kiểm tra xem người bảo trì vẫn là một bên mà bạn tin tưởng.

Cài đặt thư viện cơ quan giám sát dưới dạng phụ thuộc nhà phát triển hoặc thử nghiệm

Sử dụng thư viện như Snyk để quét dự án của bạn cho sự phụ thuộc không an toàn.

Thiết lập giám sát cho các Chức năng; kiểm tra nó sau khi cập nhật thư viện

Nếu bạn sử dụng SDK Mây Chức năng logger , bạn có thể theo dõi và được cảnh báo về hành vi bất thường, bao gồm hành vi gây ra bởi bản cập nhật thư viện.

Chức năng đám mây an toàn

Không bao giờ đưa thông tin nhạy cảm vào các biến môi trường của Chức năng đám mây

Thường trong ứng dụng Node.js tự lưu trữ, bạn sử dụng các biến môi trường để chứa thông tin nhạy cảm như khóa riêng tư. Đừng làm điều này trong Cloud Chức năng. Vì Chức năng đám mây sử dụng lại môi trường giữa các lần gọi hàm, thông tin nhạy cảm không được lưu trữ trong môi trường.

  • Để lưu trữ các khóa API căn cứ hỏa lực, đó là không bí mật , chỉ cần nhúng chúng trong mã.
  • Nếu đang sử dụng SDK quản trị Firebase trong Chức năng đám mây, bạn không cần phải cung cấp thông tin đăng nhập tài khoản dịch vụ một cách rõ ràng vì SDK có thể tự động lấy chúng trong quá trình khởi chạy.
  • Nếu bạn đang gọi điện thoại Google và Google Cloud API đòi hỏi thông tin tài khoản dịch vụ, thư viện Google Auth cho Node.js có thể nhận được những thông tin từ các thông tin mặc định ứng dụng , mà sẽ được tự động dân cư trong Cloud Chức năng.
  • Để làm cho các phím riêng và các thông tin về các dịch vụ không phải của Google dành cho chức năng Cloud Print của bạn, sử dụng đám mây bí mật quản lý .

Mã hóa thông tin nhạy cảm

Nếu bạn không thể tránh chuyển thông tin nhạy cảm đến Chức năng đám mây của mình, bạn phải đưa ra giải pháp tùy chỉnh của riêng mình để mã hóa thông tin.

Các chức năng đơn giản an toàn hơn; nếu bạn cần sự phức tạp, hãy xem xét Cloud Run

Cố gắng giữ cho Các chức năng đám mây của bạn đơn giản và dễ hiểu nhất có thể. Sự phức tạp trong các chức năng của bạn thường có thể dẫn đến các lỗi khó phát hiện hoặc hành vi không mong muốn.

Nếu bạn cần cấu hình logic hoặc môi trường phức tạp, xem xét sử dụng đám mây Run thay vì Mây Chức năng.