Làm cách nào để hạn chế sửa đổi dữ liệu Firebase?


92

Firebase cung cấp back-end cơ sở dữ liệu để các nhà phát triển có thể tập trung vào mã phía máy khách.

Vì vậy, nếu ai đó lấy đi tiểu firebase của tôi (ví dụ, https://firebaseinstance.firebaseio.com) thì hãy phát triển trên nó cục bộ .

Sau đó, liệu họ có thể tạo một ứng dụng khác từ phiên bản Firebase của tôi, đăng ký và tự xác thực để đọc tất cả dữ liệu của ứng dụng Firebase của tôi không?

Câu trả lời:


104

@Frank van Puffelen,

Bạn đã đề cập đến cuộc tấn công lừa đảo. Thực sự có một cách để đảm bảo điều đó.

Nếu bạn đăng nhập vào bảng điều khiển Trình quản lý API của googleAPIs, bạn có một tùy chọn để khóa liên kết giới thiệu HTTP mà ứng dụng của bạn sẽ chấp nhận yêu cầu từ đó.

  1. truy cập https://console.developers.google.com/apis
  2. Chuyển đến dự án firebase của bạn
  3. Đi tới thông tin đăng nhập
  4. Trong khóa API, hãy chọn khóa Trình duyệt được liên kết với dự án firebase của bạn (phải có cùng khóa với khóa API mà bạn sử dụng để khởi chạy ứng dụng firebase của mình.)
  5. Trong "Chấp nhận yêu cầu từ các liên kết giới thiệu HTTP này (trang web), chỉ cần thêm URL của ứng dụng của bạn.

Điều này sẽ chỉ cho phép miền trong danh sách trắng sử dụng ứng dụng của bạn.

Điều này cũng được mô tả tại đây trong danh sách kiểm tra khởi chạy firebase tại đây: https://firebase.google.com/support/guides/launch-checklist

Có lẽ tài liệu về firebase có thể làm cho điều này hiển thị nhiều hơn hoặc tự động khóa miền theo mặc định và yêu cầu người dùng cho phép truy cập?


2
khi tôi truy cập bảng điều khiển API của Google, tôi không thấy tùy chọn khóa liên kết giới thiệu HTTP. Ảnh chụp màn hình sẽ hữu ích. thx
ridanak

Bạn đã thử làm theo các bước trên chưa? Nó sẽ đưa bạn đến ngay đó. Vì lý do bảo mật, tôi sẽ không chụp ảnh màn hình. Nhớ tìm khóa trình duyệt. may mắn nhất.
prifrofro

4
Còn khi sử dụng firebase với một ứng dụng di động kết hợp, sử dụng một khuôn khổ như ionic, thì danh sách trắng có thể hoạt động như thế nào? Bất kỳ đề xuất?
Dinana

1
@prufrofro Điều đó có hiệu quả với bạn không? Đang suy nghĩ để làm điều tương tự cho một ứng dụng Android. Tôi tự hỏi tại sao Firebase không đề cập điều đó trong phần bảo mật.
steliosf

2
@Ana và Có nhưng Firebase không đề cập đến vấn đề này trong tài liệu. Theo mặc định, các khóa là công khai và bạn phải hạn chế chúng một cách thủ công chỉ để sử dụng trong một tên gói cụ thể và chứng chỉ ứng dụng SHA-1. Và tôi đã tự hỏi tại sao Firebase không đề cập đến điều này. Có bị bắt hay gì không?
steliosf

38

Thực tế là ai đó biết URL của bạn không phải là một rủi ro bảo mật.

Ví dụ: Tôi không gặp vấn đề gì khi nói với bạn rằng ngân hàng của tôi lưu trữ trang web của nó tại bankofamerica.com và nó sử dụng giao thức HTTP ở đó. Trừ khi bạn cũng biết thông tin đăng nhập mà tôi sử dụng để truy cập trang web đó, nếu không việc biết URL không có lợi cho bạn.

Để bảo mật dữ liệu của bạn, cơ sở dữ liệu của bạn phải được bảo vệ bằng:

  • các quy tắc xác thực đảm bảo tất cả dữ liệu tuân theo cấu trúc mà bạn muốn
  • quy tắc ủy quyền để đảm bảo rằng mỗi bit dữ liệu chỉ có thể được đọc và sửa đổi bởi người dùng được ủy quyền

Tất cả điều này được đề cập trong tài liệu Firebase về Bảo mật và Quy tắc , mà tôi thực sự khuyên bạn nên sử dụng.

Với các quy tắc bảo mật này, cách duy nhất để ứng dụng của người khác có thể truy cập dữ liệu trong cơ sở dữ liệu của bạn là nếu họ sao chép chức năng của ứng dụng của bạn, yêu cầu người dùng đăng nhập vào ứng dụng của họ thay vì của bạn và đăng nhập / đọc từ / ghi vào cơ sở dữ liệu của bạn; thực chất là một cuộc tấn công lừa đảo. Trong trường hợp đó, không có vấn đề bảo mật nào trong cơ sở dữ liệu, mặc dù có lẽ đã đến lúc cần một số cơ quan chức năng vào cuộc.


4
không hoàn toàn là câu trả lời tôi đang tìm kiếm. Hãy để tôi hỏi bạn theo một cách khác. Giả sử tôi đã cung cấp cho bạn url này tới cơ sở lửa của tôi https://tinderclone.firebaseio.com/https://tinderclone.firebaseio.com/profiles.json. Chúng là cơ sở dữ liệu firebase thực. Bạn có thể phát triển một ứng dụng từ nó, tạo một biểu mẫu đăng ký và biểu mẫu đăng nhập bằng email. Vì ứng dụng của tôi cho phép bất kỳ ai đăng ký bằng email, sau khi đăng ký, bạn có thể đọc tất cả dữ liệu không? Tôi sẽ hỏi bạn một câu hỏi khác sau. Cảm ơn
Rachanak

4
Điều đó phụ thuộc vào cách bạn bảo mật cơ sở dữ liệu của mình. Chỉ cần thêm vào ".read": falsesẽ ngăn không cho bất kỳ ai xem dữ liệu. Bạn có thể muốn cho phép nhiều hơn thế một chút, nhưng tất cả phụ thuộc vào trường hợp sử dụng của bạn. Bảo mật dữ liệu được đề cập trong tài liệu Firebase về Bảo mật và Quy tắc .
Frank van Puffelen

6

Liên quan đến danh sách trắng Auth cho ứng dụng dành cho thiết bị di động, trong đó tên miền không được áp dụng, Firebase có

1) SHA1 fingerprintcho các ứng dụng Android

2) App Store ID and Bundle ID and Team ID (if necessary)cho các ứng dụng iOS của bạn

mà bạn sẽ phải định cấu hình trong bảng điều khiển Firebase.

Với sự bảo vệ này, vì việc xác thực không chỉ là nếu ai đó có khóa API hợp lệ, miền Auth, v.v., mà còn, nó đến từ các ứng dụng được ủy quyền của chúng tôi và domain name/HTTP referrer in casecủa Web .

Nói rằng, chúng tôi không phải lo lắng nếu khóa API này và các thông số kết nối khác bị lộ cho người khác.

Để biết thêm thông tin, https://firebase.google.com/support/guides/launch-checklist


Xin lỗi vì sự thiếu hiểu biết của tôi, tôi không giỏi về mã hóa nhưng không thể truy cập Sha1 thông qua apk của bạn? Mọi người không thể sao chép Sha1 quá? Tôi không thấy điều này giúp ích như thế nào. Tôi sẽ rất vui nếu được chứng minh ngược lại :)
cs guy

Đúng. Bạn chắc chắn có thể nhận được sha1 của một apk. Nhưng đó không phải là thứ bạn chuyển làm tham số cho firebase để xác thực cuộc gọi của mình. Nó được thực hiện bởi firebase ở cấp api-sdk của nó (tin từ thời gian chạy android). Vì vậy, bạn sẽ không thể gửi cái này tới firebase làm tham số để giả mạo kết nối.
Anand

Chỉ sử dụng vân tay SHA1 sẽ không giúp ích gì cho việc bảo mật giao tiếp ứng dụng Android của bạn với Firebase. Bản thân SHA1 có thể được lấy và sao chép dễ dàng và kết nối vẫn có thể bị giả mạo bằng cách sử dụng API Firebase thay vì SDK. Trước tiên, bạn nên chứng thực ứng dụng của mình và sử dụng một số mã làm mờ mã để ẩn khóa.
FEBRYAN ASA PERDANA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.