Bảo vệ thông tin đăng nhập của ứng dụng Cloud ML Apple trên Firebase

Nếu ứng dụng của bạn trên Apple sử dụng một trong các API đám mây của Firebase ML, thì trước khi phát hành ứng dụng chính thức, bạn nên thực hiện thêm một số bước để ngăn chặn việc truy cập API trái phép.

1. Giảm phạm vi của các khoá API hiện có

Trước tiên, hãy định cấu hình các khoá API hiện có để không cho phép truy cập vào API Cloud Vision:

  1. Mở trang Thông tin xác thực của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.

  2. Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho khoá), sau đó thêm vào danh sách tất cả API mà bạn muốn khoá API có quyền truy cập. Hãy nhớ không thêm API Cloud Vision.

    Khi định cấu hình các quy tắc hạn chế đối với API của khoá API, bạn đang khai báo rõ ràng các API mà khoá có quyền truy cập. Theo mặc định, khi mục API restrictions (Hạn chế cho API) chọn Don't restrict key (Không hạn chế khoá), bạn có thể sử dụng khoá API để truy cập vào bất kỳ API nào được bật cho dự án.

Giờ đây, các khoá API hiện có của bạn sẽ không cấp quyền truy cập vào các dịch vụ học máy trên đám mây, nhưng mỗi khoá sẽ tiếp tục hoạt động cho mọi API mà bạn đã thêm vào danh sách các quy tắc hạn chế về API.

Xin lưu ý rằng nếu bật bất kỳ API nào khác trong tương lai, bạn phải thêm các API đó vào danh sách các quy tắc hạn chế đối với API cho khoá API hiện có.

2. Tạo khoá API mới để sử dụng với Firebase ML

Tiếp theo, hãy tạo một khoá API mới cho Firebase ML chỉ cho phép các lệnh gọi đến API Cloud Vision:

  1. Quay lại trang Thông tin xác thực. Đảm bảo bạn vẫn chọn dự án Firebase.

  2. Nhấp vào Tạo thông tin xác thực > Khoá API. Ghi lại khoá API mới, sau đó nhấp vào Restrict key (Hạn chế khoá).

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho khoá), sau đó thêm chỉ API Cloud Vision vào danh sách.

Khoá API này chỉ cấp quyền truy cập vào API Cloud Vision và có thể được Firebase ML sử dụng để truy cập vào các mô hình dựa trên đám mây.

Để giảm thiểu hậu quả của việc khoá bị xâm phạm, bạn nên giảm hạn mức trên mỗi người dùng của API Cloud Vision từ chế độ cài đặt mặc định. Cách thực hiện:

  1. Mở trang Cloud Vision API Quotas (Hạn mức API Cloud Vision) của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.

  2. Trong phần Yêu cầu, hãy đặt hạn mức Số yêu cầu mỗi phút trên mỗi người dùng thành một giá trị hợp lý cho ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn liên quan đến việc tải ảnh chụp một tài liệu lên để lấy lại văn bản của tài liệu đó, thì người dùng khó có thể thực hiện việc đó nhiều lần trong vài giây, vì vậy, hạn mức 30-40 có thể là an toàn.

    Xin lưu ý rằng trong ngữ cảnh này, "số yêu cầu trên mỗi người dùng" đề cập đến các yêu cầu từ một địa chỉ IP duy nhất. Bạn có thể cần cân nhắc điều này nếu muốn nhiều người dùng sử dụng ứng dụng của bạn cùng một lúc từ phía sau NAT.

4. Gọi API đám mây bằng khoá API Firebase ML

Cuối cùng, trong ứng dụng, hãy định cấu hình Firebase ML để sử dụng khoá API mới.

Vì khoá API Firebase ML cho phép truy cập chưa xác thực vào API Cloud Vision, nên bạn cần giữ kín khoá này để ngăn chặn việc sử dụng trái phép và tính phí vào tài khoản thanh toán của bạn. Để làm như vậy, bạn không nên đưa khoá API vào tệp nhị phân của ứng dụng. Thay vào đó, trong thời gian chạy ứng dụng, hãy xác minh rằng một người dùng đáng tin cậy đã đăng nhập, sau đó mới truy xuất khoá API từ máy chủ.

Ngay cả khi bạn tuân thủ các phương pháp này, khoá API vẫn có thể bị xâm phạm. Bạn nên thực hiện các bước để giúp giảm thiểu hậu quả của khoá bị xâm phạm, chẳng hạn như giảm hạn mức trên mỗi người dùng của API như mô tả ở trên, triển khai chính sách xoay vòng khoá và phát hành các khoá khác nhau cho các nhóm người dùng khác nhau.

Sau khi ứng dụng của bạn đã thu nạp khoá API một cách an toàn, khi bạn muốn gọi API Cloud Firebase ML, hãy chỉ định khoá:

Swift

if let cloudVisionKey = getYourApiKey() {  // See note above about securing your API key
    let options = VisionCloudDetectorOptions()
    options.apiKeyOverride = cloudVisionKey
    let cloudDetector = Vision.vision().cloudLandmarkDetector(options: options)
}

Objective-C

NSString *cloudVisionKey = [self getYourApiKey];  // See note above about securing your API key
if (cloudVisionKey != nil) {
    FIRVisionCloudDetectorOptions *options =
            [[FIRVisionCloudDetectorOptions alloc] init];
    options.APIKeyOverride = cloudVisionKey;
    FIRVisionCloudLandmarkDetector *landmarkDetector =
            [vision cloudLandmarkDetectorWithOptions:options];
}

Ngoài ra, bạn nên làm theo lời khuyên chung trong phần Bảo mật khoá API.

Các bước tiếp theo

Hãy xem danh sách kiểm tra khi phát hành để biết thông tin về cách chuẩn bị ứng dụng phát hành khi sử dụng các tính năng khác của Firebase.