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 lưu lượng truy cập lạm dụng, chẳng hạn như các cuộc tấn công từ chối dịch vụ (DOS), hãy thiết lập giám sát và cảnh báo cho Cloud Firestore , Cơ sở dữ liệu thời gian thực , Lưu trữ đám mâyLưu trữ

Nếu bạn nghi ngờ có một cuộc tấn công vào ứng dụng của mình, hãy liên hệ với Bộ phận hỗ trợ càng sớm càng tốt để cho họ biết điều 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 mới có thể truy cập các dịch vụ phụ trợ của bạn, hãy bật Kiểm tra ứng dụng cho mọi dịch vụ 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ể giới hạn số lượng phiên bản đồng thời của một hàm dựa trên lưu lượng truy cập bình thường cho ứ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. Đảm bảo theo dõi Bảng điều khiển sử dụng và thanh toán , nhưng bạn cũng có thể đặt cảnh báo ngân sách cho dự án của mình để được thông báo khi việc sử dụng tài nguyên vượt quá 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 những lỗi này ảnh hưởng đến các dịch vụ trực tiếp bằng cách thực hiện quá trình phát triển của mình với bộ trình giả lập Firebase .

(Và nếu bạn vô tình tự mình thực hiện DOS, hãy hủy triển khai chức năng của bạn bằng cách xóa nó khỏi 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 kết quả của một hàm trong thời gian thực, bạn có thể giảm thiểu lưu lượng truy cập lạm dụng bằng cách xử lý kết quả theo lô: xuất bản kết quả cho một chủ đề Pub / Sub và xử lý kết quả đều đặn với một hàm đã lên lịch .

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

Firebase chỉ sử dụng các khóa API để xác định dự án Firebase của ứng dụng của bạn với các dịch vụ Firebase chứ không phải để kiểm soát quyền truy cập vào cơ sở dữ liệu hoặc dữ liệu Cloud Storage, được thực hiện bằng Quy tắc bảo mật Firebase . 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 Firebase .

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

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

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

Không giống như các khóa API cho các dịch vụ Firebase, các khóa máy chủ FCM (được sử dụng bởi API FCM HTTP cũ ) khóa 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ụ

Ngoài ra, không giống như khóa API cho các dịch vụ Firebase, khóa riêng tư của tài khoản dịch vụ (được sử dụng bởi SDK quản trị) khóa 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 các quy tắc bảo mật của bạn luôn theo kịp với sự phát triển của ứng dụng, hãy kiểm tra các quy tắc của bạn với bộ trình giả lập Firebase và thêm các thử nghiệm này vào đường dẫn CI của bạn. Xem các hướng dẫn này về Cloud 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ụ của Firebase. Tạo JWT tùy chỉnh từ một môi trường đáng tin cậy, sau đó chuyển mã thông báo cho ứng dụng khách của bạn, sử dụng mã thông báo để xác thực ( iOS + , Android , Web , Unity , C ++ ).

Để biết ví dụ về cách sử dụng xác thực tùy chỉnh với nhà cung cấp bên thứ ba, hãy xem bài đăng trên blog, Xác thực với Firebase bằ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, thì 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 mật khẩu email được quản lý của Firebase, hãy thắt chặt hạn ngạch mặc định của các điểm cuối identitytoolkit.googleapis.com để ngăn chặn các cuộc tấn công brute force. Bạn có thể làm như vậy từ trang của API trong Google Cloud Console .

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ố

Để tăng cường bảo mật khi đă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 Nền tảng nhận dạng đám mây . 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 duy trì dữ liệu ngoài việc khởi động lại ứng dụng trên một thiết bị, hãy chuyển đổi người dùng sang 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ĩ đó, hãy bảo vệ tất cả dữ liệu không công khai bằng các quy tắc bảo mật yêu cầu phương pháp đăng nhập cụ thể hoặc địa chỉ email đã xác minh .

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 nhóm lớn hơn, bạn có thể giảm thiểu hậu quả của những 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 bằng cách sử dụng vai trò được xác định trước hoặc vai trò IAM tùy chỉnh.

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

Chú ý đến 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ó. 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.

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 để tìm các phần 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 trình ghi chức năng đám mây , bạn có thể theo dõi và được cảnh báo về hành vi bất thường, bao gồm cả hành vi do các bản cập nhật thư viện gây ra.

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 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ư. Không làm điều này trong Chức năng đám mây . 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 Firebase, không phải là khóa bí mật , chỉ cần nhúng chúng vào 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 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 API Google và Google Cloud yêu cầu thông tin đăng nhập tài khoản dịch vụ, thì thư viện Google Auth cho Node.js có thể lấy các thông tin xác thực này từ thông tin đăng nhập mặc định của ứng dụng, được tự động điền vào Chức năng đám mây.
  • Để cung cấp khóa cá nhân và thông tin đăng nhập cho các dịch vụ không phải của Google cho Chức năng đám mây của bạn, hãy sử dụng Trình quản lý bí mật của đám mây .

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 môi trường hoặc logic phức tạp, hãy cân nhắc sử dụng Cloud Run thay vì Cloud Functions.