Tìm hiểu các quy tắc bảo mật của Firebase dành cho Cloud Storage

Theo truyền thống, bảo mật là một trong những phần phức tạp nhất của quá trình phát triển ứng dụng. Trong hầu hết các ứng dụng, nhà phát triển phải tạo và chạy một máy chủ xử lý việc xác thực (người dùng là ai) và uỷ quyền (những việc người dùng có thể làm). Việc xác thực và uỷ quyền khó thiết lập, khó thiết lập hơn và rất quan trọng đối với sự thành công của sản phẩm.

Tương tự như cách Firebase Authentication giúp bạn dễ dàng xác thực người dùng, Firebase Security Rules cho Cloud Storage giúp bạn dễ dàng uỷ quyền cho người dùng và xác thực các yêu cầu. Cloud Storage Security Rules giúp bạn xử lý sự phức tạp bằng cách cho phép bạn chỉ định các quyền dựa trên đường dẫn. Chỉ với vài dòng mã, bạn có thể viết các quy tắc uỷ quyền để hạn chế các yêu cầu Cloud Storage cho một người dùng nhất định hoặc giới hạn kích thước của tệp tải lên.

Firebase Realtime Database có một tính năng tương tự, được gọi là Firebase Realtime Database Security Rules

Xác thực

Việc biết được người dùng là ai là một phần quan trọng trong quá trình xây dựng ứng dụng và Firebase Authentication cung cấp một giải pháp chỉ có thể sử dụng, bảo mật và chỉ ở phía máy khách để xác thực. Firebase Security Rules cho Cloud Storage liên kết với Firebase Authentication để bảo mật dựa trên người dùng. Khi người dùng được xác thực bằng Firebase Authentication, biến request.auth trong Cloud Storage Security Rules sẽ trở thành một đối tượng chứa mã nhận dạng duy nhất của người dùng (request.auth.uid) và tất cả thông tin khác của người dùng trong mã thông báo (request.auth.token). Khi người dùng không được xác thực, request.auth sẽ là null. Điều này cho phép bạn kiểm soát một cách an toàn quyền truy cập vào dữ liệu trên cơ sở từng người dùng. Bạn có thể tìm hiểu thêm trong phần Xác thực.

Ủy quyền

Việc xác định người dùng chỉ là một phần của quy trình bảo mật. Sau khi biết họ là ai, bạn cần có một cách để kiểm soát quyền truy cập của họ vào các tệp trong Cloud Storage.

Cloud Storage cho phép bạn chỉ định cho mỗi tệp và cho mỗi quy tắc uỷ quyền đường dẫn trên máy chủ của chúng tôi, đồng thời xác định quyền truy cập vào các tệp trong ứng dụng. Ví dụ: Cloud Storage Security Rules mặc định yêu cầu Firebase Authentication để thực hiện bất kỳ thao tác read hoặc write nào trên tất cả tệp:

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

Bạn có thể chỉnh sửa các quy tắc này bằng cách chọn một ứng dụng Firebase trong bảng điều khiển Firebase và xem thẻ Rules của phần Bộ nhớ.

Xác thực dữ liệu

Bạn cũng có thể dùng Firebase Security Rules cho Cloud Storage để xác thực dữ liệu, bao gồm cả việc xác thực tên và đường dẫn tệp cũng như các thuộc tính siêu dữ liệu của tệp như contentTypesize.

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

Các bước tiếp theo