Advertisement
  1. Code
  2. Mobile Development

Các quy tắc an toàn trong Firebase

by
Read Time:6 minsLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Các quy tắt bảo mật Cơ sở dữ liệu Thời gian thực Firebase là cách bạn bảo mật dữ liệu của bạn khỏi người sử dụng trái phép và bảo vệ các cấu trúc dữ liệu của bạn.

Trong hướng dẫn nhanh này, tôi sẽ giải thích cách làm thế nào để cấu hình quy tắc bảo mật cơ sở dữ liệu của bạn đúng cách để chỉ người dùng được ủy quyền mới có thể đọc hoặc ghi vào dữ liệu. Tôi cũng sẽ cho bạn thấy cách làm thế nào để cấu trúc dữ liệu của bạn để làm cho nó dễ dàng để bảo mật.

Vấn đề

Giả sử rằng chúng ta có dữ liệu JSON trong cơ sở dữ liệu Firebase của chúng ta, như trong ví dụ dưới đây:

Nhìn vào cơ sở dữ liệu, bạn có thể thấy rằng có một số vấn đề với dữ liệu của chúng ta:

  1. Hai người dùng (user1user3) có cùng một số điện thoại. Chúng ta muốn những cái này là duy nhất.
  2. user3 có một con số cho lastName, thay vì một chuỗi.
  3. user2 chỉ có 7 chữ số trong số điện thoại của họ, thay vì 11.
  4. Giá trị tuổi cho user1user2 là một chuỗi, trong đó user3 là một con số.

Với tất cả những sai sót được nêu ra trong dữ liệu của chúng ta, chúng ta đã mất đi tính toàn vẹn dữ liệu. Trong các bước sau đây, tôi sẽ chỉ cho bạn cách làm thế nào để ngăn chặn điều đó xảy ra.

Các quy tắt cho phép

Cơ sở dữ liệu thời gian thực Firebase có các kiểu quy tắc sau đây:

Kiểu Chức năng
.read Mô tả nếu và khi nào dữ liệu được cho phép để đọc bởi người dùng.
.write Mô tả nếu và khi nào dữ liệu được cho phép để ghi.
.validate Xác định một giá trị được định dạng chính xác sẽ thế nào, khi nào nó có thuộc tính con, và kiểu dữ liệu.
.indexOn Chỉ định một con cho chỉ số để hỗ trợ sắp xếp và truy vấn.

Tìm hiểu thêm về chúng trong tài liệu Firebase.

Dưới đây là một quy tắc cho phép cho khoá users trong cơ sở dữ liệu của chúng ta.

Điều này thật tệ, vì nó cho phép bất kỳ ai có khả năng đọc hoặc ghi dữ liệu vào cơ sở dữ liệu. Bất cứ ai có thể truy cập vào đường dẫn /users/ cũng như các đường dẫn sâu hơn. Không chỉ vậy, mà không có cấu trúc nào được áp đặt cho dữ liệu của users.

Quy tắc điều khiển truy cập

Với những quy tắc này, chúng ta kiểm soát quyền truy cập vào các bản ghi users đối với những người dùng đã đăng nhập. Không chỉ vậy, mà những người dùng chỉ có thể đọc hoặc ghi dữ liệu của chính họ. Chúng ta làm điều này với một ký tự đại diện: $uid. Đây là một biến đại diện cho khóa con (tên biến bắt đầu với $). Ví dụ, truy cập vào đường dẫn /users/user1, $uid"user1".

Tiếp theo, chúng ta tận dụng biến auth, nó đại diện cho người dùng hiện đang xác thực. Đây là một biến máy chủ được xác định trước được cung cấp bởi Firebase. Ở dòng số 5 và 6, chúng ta đang thực thi một ràng buộc khả năng truy cập mà chỉ có người dùng đã xác thực với id tương tự như hồ sơ người dùng có thể đọc hoặc viết dữ liệu của nó. Nói cách khác, đối với mỗi người dùng truy xuất đọc và ghi được cấp cho /users/<uid>/, nơi <uid> đại diện cho id người dùng hiện được xác thực.

Các biến máy chủ khác của Firebase là:

now Thời gian hiện tại trong mili giây kể từ Linux epoch.
root Một RuleDataSnapshot đại diện cho đường dẫn gốc trong cơ sở dữ liệu Firebase khi nó tồn tại trước khi thực thi.
newData Một RuleDataSnapshot đại diện cho dữ liệu khi nó sẽ tồn tại sau thực thi. Nó bao gồm dữ liệu mới được viết và dữ liệu hiện có.
data Một RuleDataSnapshot đại diện cho dữ liệu khi nó đã tồn tại trước thực thi.
auth Đại diện cho một khối token của người dùng được xác thực.

Đọc thêm về những biến này và các biến máy chủ khác trong tài liệu Firebase.

Ràng buộc cấu trúc dữ liệu

Chúng ta cũng có thể sử dụng các quy tắc Firebase để thực thi các ràng buộc trên dữ liệu trong cơ sở dữ liệu của chúng ta.

Ví dụ, trong các quy tắc dưới đây, ở dòng 8 và 11, chúng ta đảm bảo các quy tắt mà bất kỳ giá trị mới nào cho firstName và lastName phải là một chuỗi. Trong dòng 14, chúng ta đảm bảo rằng tuổi là một số. Cuối cùng, trong dòng 17 và 18, chúng ta đang bắt buộc giá trị số điện thoại phải là một chuỗi và chiều dài 11.

Nhưng làm thế nào chúng ta ngăn chặn số điện thoại trùng lặp?

Ngăn ngừa trùng lặp

Tiếp theo, tôi sẽ chỉ cho bạn cách làm thế nào để ngăn chặn số điện thoại trùng lặp.

Bước 1: Tiêu chuẩn hóa cấu trúc dữ liệu

Trước tiên chúng ta cần làm là thay đổi đường dẫn gốc để bao gồm một cấp độ cao nhất /phoneNumbers/. Vì vậy, khi tạo một người dùng mới, chúng ta cũng sẽ thêm số điện thoại của người dùng vào nút này khi xác nhận thành công. Cấu trúc dữ liệu mới của chúng ta sẽ trông giống như sau:

Bước 2: Ràng buộc cấu trúc dữ liệu mới

Chúng ta cần phải sửa đổi các quy tắc bảo mật để ràng buộc cấu trúc dữ liệu:

Ở đây, chúng ta đang đảm bảo số điện thoại duy nhất bằng cách kiểm tra nếu nó đã là một con của nút /phoneNumbers/ với số điện thoại cho trước như là khóa. Nói cách khác, chúng ta đang kiểm tra rằng số điện thoại vẫn chưa được đăng ký bởi một người dùng. Nếu nó vẫn chưa tồn tại, thì xác nhận là thành công và hoạt động ghi sẽ được chấp nhận—nếu không nó sẽ bị từ chối.

Ứng dụng của bạn sẽ cần phải thêm số điện thoại vào danh sách số điện thoại khi tạo một người dùng mới, và nó sẽ cần phải xoá số điện thoại của người dùng nếu người dùng đó bị xóa.

Mô phỏng xác nhận và các quy tắc bảo mật

Bạn có thể mô phỏng các quy tắc bảo mật của bạn trong giao diện điều khiển Firebase bằng cách nhấp vào nút Simulator. Thêm các quy tắc bảo mật của bạn, chọn kiểu mô phỏng (đọc hoặc ghi), nhập vào một số dữ liệu với một đường dẫn, và nhấp vào nút Run:

Firebase SimulatorFirebase SimulatorFirebase Simulator

Nếu giá trị của firstName là một số thay vì một chuỗi, thì việc xác nhận sẽ thất bại và truy cập ghi sẽ bị từ chối:

Write Access DeniedWrite Access DeniedWrite Access Denied

Tổng kết

Trong hướng dẫn nhanh này, bạn đã được học về các quy tắt bảo mật cơ sở dữ liệu Firebase: làm thế nào để ngăn chặn truy cập trái phép vào dữ liệu và làm thế nào để đảm bảo rằng dữ liệu trong cơ sở dữ liệu được cấu trúc.

Để tìm hiểu thêm về các quy tắc bảo mật cơ sở dữ liệu Firebase, tham khảo tài liệu chính thức. Và xem qua một số của hướng dẫn và các khóa học Firebase của chúng tôi ở đây trên Envato Tuts+!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.