Để tóm tắt:
- Bạn có một khóa API do nhà cung cấp cấp cho bạn để bạn có thể sử dụng API của họ và bạn có nghĩa vụ ngăn không cho người khác biết khóa này
- Bạn đang thực hiện cuộc gọi đến API của nhà cung cấp đó (yêu cầu khóa API) trong mã ứng dụng của bạn
- Bạn đang triển khai ứng dụng tới các hệ thống mà khách hàng có quyền truy cập vào các tệp nhị phân và do đó có khả năng dịch ngược / khử mã hóa hoặc chặn lưu lượng
Cách tốt nhất để ngăn chặn sự thỏa hiệp của khóa này là giữ quyền kiểm soát nó. Điều này có nghĩa là nó sẽ không bao giờ được triển khai trên máy chủ nơi bất kỳ ai ngoài bạn có thể đọc tệp nhị phân và không bao giờ truy cập liên kết liên lạc mà bạn không kiểm soát.
Cuối cùng, nếu các nhị phân nằm ngoài tầm kiểm soát của bạn, mọi thứ trong đó nằm ngoài tầm kiểm soát của bạn. Tương tự, nếu ai đó có thể chặn lưu lượng, họ có thể nắm bắt khóa API ( có khả năng ngay cả khi bạn đang sử dụng SSL ).
Tôi có thể thấy hai cách chính để thực hiện việc này, cả hai cách này đều không bao gồm khóa API riêng trong ứng dụng đã triển khai của bạn:
Nhận khóa API duy nhất cho mỗi lần triển khai
Điều này sẽ yêu cầu một số mối quan hệ bổ sung với nhà cung cấp, nơi bạn có thể lấy khóa hoặc để khách hàng của bạn có được khóa.
Điều này thực sự khá phổ biến với, ví dụ, các sản phẩm sử dụng Google Maps API. Người tạo phần mềm có khóa riêng họ sử dụng khi phát triển / chạy bản sao của họ, nhưng họ không đưa nó vào phần mềm, và thay vào đó, yêu cầu bạn, như người dùng cài đặt phần mềm nói, phải truy cập Google và lấy API của riêng bạn Chìa khóa. Phần mềm chỉ có một tùy chọn cấu hình để đặt khóa API Google Maps để sử dụng.
Trên thực tế, nhiều nhà cung cấp phát hành khóa API theo hợp đồng yêu cầu bạn thực hiện theo cách này, do đó bạn thậm chí có thể đi sai đường và đây có thể là giải pháp duy nhất bạn được phép sử dụng theo Điều khoản dịch vụ của nhà cung cấp và / hoặc bất kỳ hợp đồng pháp lý nào bạn có thể có với họ.
Sử dụng Proxy
Thiết lập API proxy, nơi ứng dụng của bạn gọi API của bạn (trên máy chủ của bạn) và đến lượt mình, API của bạn gọi API của nhà cung cấp bằng cách sử dụng khóa.
Bạn có thể cần bảo vệ bổ sung trên API của mình, ví dụ: một cái gì đó để đảm bảo chỉ ứng dụng của bạn đang sử dụng nó. Điều này có thể được thực hiện bởi:
- làm cho chức năng trở nên cụ thể không có gì ngoài ứng dụng của bạn có thể sử dụng nó
- Danh sách trắng IP
- Một số cơ chế cấp phép / ủy quyền hiện có mà bạn đã có cho máy chủ của mình
- Hệ thống khóa API của riêng bạn nơi bạn có thể cấp khóa cho khách hàng của mình
Điều cần lưu ý ở đây là bạn có thể không được phép làm điều này. Nhà cung cấp của bạn có thể có Điều khoản dịch vụ hoặc hợp đồng pháp lý ngăn bạn xây dựng "dịch vụ tổng hợp" hoặc proxy, vì vậy bạn cần kiểm tra điều đó.
Xử lý hành vi sai trái
Ngay cả khi khóa của bạn không bị xâm phạm, nếu một trong những khách hàng của bạn đang làm điều gì đó khiến nhà cung cấp chặn khóa của bạn, đột nhiên TẤT CẢ khách hàng của bạn bị vô hiệu hóa và cách khắc phục duy nhất của bạn là cập nhật cho mọi người khác.
Tương tự, nếu bạn muốn chặn một trong những khách hàng của mình (ví dụ: họ đã ngừng thanh toán, vi phạm bản quyền phần mềm, v.v.) thì bạn không thể làm điều đó mà không phát hành bản cập nhật cho mọi người khác, sau đó vô hiệu hóa khóa.
Các hậu cần của điều này cho bất cứ điều gì ngoài một số ít khách hàng sẽ nhanh chóng trở thành không thể bảo vệ.
Cho dù bạn hoạt động như một proxy hoặc có một khóa duy nhất cho mỗi cài đặt, bạn có thể xử lý bất kỳ tình huống nào trong số này một cách tương đối dễ dàng (và ít ảnh hưởng đến bất kỳ ai khác).
Cố gắng bảo vệ khóa trong khi nó được nhúng trong phần mềm của bạn cuối cùng là một nỗ lực vô ích. Bất kể bạn làm gì, bất kỳ kẻ tấn công nào có quyền truy cập vào các tệp nhị phân, nguồn và / hoặc kênh liên lạc và được xác định đủ để có được chìa khóa của chúng sẽ có thể làm như vậy.
Vì vậy, đừng nhúng nó. "Động thái chiến thắng duy nhất là không chơi."