Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Tránh các quy tắc không an toàn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Sử dụng hướng dẫn này để hiểu các lỗ hổng phổ biến trong cấu hình Quy tắc bảo mật Firebase, xem xét và bảo mật tốt hơn các quy tắc của riêng bạn cũng như kiểm tra các thay đổi của bạn trước khi triển khai chúng.

Nếu bạn nhận được cảnh báo rằng dữ liệu của bạn không được bảo mật đúng cách, hãy xem lại các lỗi thường mắc phải này và cập nhật bất kỳ quy tắc dễ bị tấn công nào.

Truy cập Quy tắc bảo mật Firebase của bạn

Để xem các Quy tắc hiện có của bạn, hãy sử dụng Firebase CLI hoặc bảng điều khiển Firebase. Đảm bảo rằng bạn chỉnh sửa các quy tắc của mình bằng cách sử dụng cùng một phương pháp nhất quán, để tránh ghi đè nhầm các bản cập nhật. Nếu bạn không chắc liệu các quy tắc được xác định cục bộ của mình có phản ánh các bản cập nhật gần đây nhất hay không, bảng điều khiển Firebase luôn hiển thị phiên bản được triển khai gần đây nhất của Quy tắc bảo mật Firebase của bạn.

Để truy cập các quy tắc của bạn từ bảng điều khiển Firebase , hãy chọn dự án của bạn, sau đó điều hướng đến Cơ sở dữ liệu thời gian thực , Cloud Firestore hoặc Bộ nhớ . Nhấp vào Quy tắc khi bạn đang ở trong cơ sở dữ liệu hoặc nhóm lưu trữ chính xác.

Để truy cập các quy tắc của bạn từ Firebase CLI, hãy chuyển đến tệp quy tắc được ghi chú trong tệp firebase.json của bạn.

Hiểu các quy tắc bảo mật của Firebase

Quy tắc bảo mật của Firebase bảo vệ dữ liệu của bạn khỏi những người dùng độc hại. Khi bạn tạo phiên bản cơ sở dữ liệu hoặc nhóm Lưu trữ đám mây trong bảng điều khiển Firebase, bạn có thể chọn từ chối quyền truy cập cho tất cả người dùng ( Chế độ đã khóa ) hoặc cấp quyền truy cập cho tất cả người dùng ( Chế độ thử nghiệm ). Mặc dù bạn có thể muốn một cấu hình mở hơn trong quá trình phát triển, nhưng hãy đảm bảo bạn dành thời gian để định cấu hình đúng các quy tắc và bảo mật dữ liệu của mình trước khi triển khai ứng dụng.

Khi bạn đang phát triển ứng dụng và thử nghiệm các cấu hình khác nhau cho các quy tắc của mình, hãy sử dụng một trong các trình giả lập Firebase cục bộ để chạy ứng dụng của bạn trong môi trường phát triển cục bộ.

Các tình huống phổ biến với các quy tắc không an toàn

Các Quy tắc bạn có thể đã thiết lập theo mặc định hoặc khi bạn làm việc ban đầu để phát triển ứng dụng của mình nên được xem xét và cập nhật trước khi bạn triển khai ứng dụng của mình. Đảm bảo bạn bảo mật đúng cách dữ liệu của người dùng bằng cách tránh những lỗi phổ biến sau đây.

Mở quyền truy cập

Khi bạn thiết lập dự án Firebase của mình, bạn có thể đã đặt các quy tắc của mình để cho phép truy cập mở trong quá trình phát triển. Bạn có thể nghĩ rằng bạn là người duy nhất sử dụng ứng dụng của mình, nhưng nếu bạn đã triển khai ứng dụng, thì ứng dụng đó sẽ có sẵn trên internet. Nếu bạn không xác thực người dùng và định cấu hình các quy tắc bảo mật, thì bất kỳ ai đoán được ID dự án của bạn đều có thể ăn cắp, sửa đổi hoặc xóa dữ liệu.

Không được khuyến nghị: Quyền truy cập đọc và ghi cho tất cả người dùng.

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Cơ sở dữ liệu thời gian thực

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true,
    ".write": true
  }
}
    

Lưu trữ đám mây

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Giải pháp: Các quy tắc hạn chế quyền truy cập đọc và ghi.

Xây dựng các quy tắc phù hợp với hệ thống phân cấp dữ liệu của bạn. Một trong những giải pháp phổ biến cho sự mất an toàn này là bảo mật dựa trên người dùng với Xác thực Firebase. Tìm hiểu thêm về cách xác thực người dùng bằng các quy tắc .

Cloud Firestore

Cơ sở dữ liệu thời gian thực

Lưu trữ đám mây

Quyền truy cập cho bất kỳ người dùng đã xác thực nào

Đôi khi, Quy tắc kiểm tra xem người dùng đã đăng nhập hay chưa, nhưng không hạn chế thêm quyền truy cập dựa trên xác thực đó. Nếu một trong các quy tắc của bạn bao gồm auth != null , hãy xác nhận rằng bạn muốn bất kỳ người dùng đã đăng nhập nào đều có quyền truy cập vào dữ liệu.

Không được khuyến nghị: Bất kỳ người dùng đã đăng nhập nào cũng có quyền truy cập đọc và ghi vào toàn bộ cơ sở dữ liệu của bạn.

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Cơ sở dữ liệu thời gian thực

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

Lưu trữ đám mây

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Giải pháp: Thu hẹp quyền truy cập bằng cách sử dụng các điều kiện bảo mật.

Khi bạn đang kiểm tra xác thực, bạn cũng có thể muốn sử dụng một trong các thuộc tính xác thực để hạn chế hơn nữa quyền truy cập của những người dùng cụ thể đối với các tập dữ liệu cụ thể. Tìm hiểu thêm về các thuộc tính xác thực khác nhau.

Cloud Firestore

Cơ sở dữ liệu thời gian thực

Lưu trữ đám mây

(Cơ sở dữ liệu thời gian thực) Các quy tắc kế thừa không đúng

Quy tắc cơ sở dữ liệu thời gian thực phân tầng, với các quy tắc ở các đường dẫn cha, nông hơn, ghi đè các quy tắc ở các nút con sâu hơn. Khi bạn viết quy tắc tại một nút con, hãy nhớ rằng nó chỉ có thể cấp thêm các đặc quyền. Bạn không thể tinh chỉnh hoặc thu hồi quyền truy cập vào dữ liệu ở đường dẫn sâu hơn trong cơ sở dữ liệu của mình.

Không được khuyến nghị: Tinh chỉnh quy tắc tại các đường dẫn con
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Giải pháp: Viết các quy tắc tại các đường dẫn mẹ rộng và cấp các đặc quyền cụ thể hơn cho các đường dẫn con Nếu nhu cầu truy cập dữ liệu của bạn đòi hỏi chi tiết hơn, hãy giữ các quy tắc của bạn thật chi tiết. Tìm hiểu thêm về xếp tầng Quy tắc cơ sở dữ liệu thời gian thực trong Bảo mật dữ liệu của bạn .

Quyền truy cập đã đóng

Trong khi bạn đang phát triển ứng dụng của mình, một cách tiếp cận phổ biến khác là giữ cho dữ liệu của bạn bị khóa. Thông thường, điều này có nghĩa là bạn đã đóng quyền truy cập đọc và ghi đối với tất cả người dùng, như sau:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Cơ sở dữ liệu thời gian thực

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

Lưu trữ đám mây

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

SDK quản trị viên Firebase và Chức năng đám mây vẫn có thể truy cập vào cơ sở dữ liệu của bạn. Sử dụng các quy tắc này khi bạn định sử dụng Cloud Firestore hoặc Cơ sở dữ liệu thời gian thực làm chương trình phụ trợ chỉ dành cho máy chủ kết hợp với SDK quản trị Firebase. Mặc dù nó an toàn, nhưng bạn nên kiểm tra xem ứng dụng của bạn có thể truy xuất dữ liệu đúng cách hay không.

Tìm hiểu thêm về Quy tắc bảo mật Cloud Firestore và cách chúng hoạt động trong Bắt đầu với Quy tắc bảo mật Cloud Firestore .

Kiểm tra Quy tắc bảo mật Cloud Firestore của bạn

Để kiểm tra hành vi của ứng dụng và xác minh cấu hình Quy tắc bảo mật Cloud Firestore của bạn, hãy sử dụng Trình mô phỏng Firebase . Sử dụng trình giả lập Cloud Firestore để chạy và tự động hóa các bài kiểm tra đơn vị trong môi trường cục bộ trước khi bạn triển khai bất kỳ thay đổi nào.

Để nhanh chóng xác thực Quy tắc bảo mật Firebase trong bảng điều khiển Firebase, hãy sử dụng Trình mô phỏng quy tắc Firebase .