Coi khóa bí mật như quyền truy cập
API key thường giúp dịch vụ nhận diện ứng dụng hoặc cấp quyền sử dụng một chức năng. Nếu tài liệu nhà cung cấp gọi đó là khóa bí mật, người có khóa có thể sử dụng quyền gắn với nó. Đừng đưa khóa thật vào bài hỏi lỗi, ảnh chụp màn hình hoặc đoạn mã chia sẻ công khai.
Một số dịch vụ có khóa được thiết kế để xuất hiện phía trình duyệt, với giới hạn riêng. Đừng suy từ trường hợp đó rằng mọi API key đều công khai được. Khi chưa rõ loại khóa, đọc tài liệu trước và coi nó là bí mật trong lúc kiểm tra.
Biết mã của bạn chạy ở đâu
Mã JavaScript gửi tới trình duyệt có thể được người dùng xem. Đặt khóa bí mật trong biến của giao diện, đổi tên biến hoặc làm rối mã không giữ được bí mật. Một website tĩnh cũng không có nơi cất khóa máy chủ chỉ nhờ thêm tệp cấu hình.
Biến môi trường giúp tách cấu hình khỏi mã nguồn, nhưng không tự bảo đảm khóa sẽ ở phía máy chủ. Công cụ build có thể đưa một số biến vào mã phía trình duyệt. Hãy kiểm tra quy tắc của framework và nội dung bản build trước khi triển khai.
Nếu tác vụ cần khóa bí mật, hãy xử lý ở phần máy chủ được kiểm soát. Điểm gọi máy chủ đó cũng cần xác thực, giới hạn quyền và giới hạn sử dụng phù hợp; nếu mở cho bất kỳ ai gọi, người khác vẫn có thể tiêu thụ tài nguyên qua nó.
Thiết lập phạm vi nhỏ trước
- Tạo khóa riêng cho môi trường thử nghiệm nếu dịch vụ hỗ trợ.
- Chỉ cấp quyền cần cho tác vụ; tránh dùng khóa quản trị cho việc đọc dữ liệu.
- Đặt giới hạn sử dụng và cảnh báo nếu có.
- Lưu khóa bằng cơ chế bí mật của nền tảng hoặc cấu hình cục bộ không đưa vào Git.
- Viết tệp mẫu chỉ chứa tên biến và giá trị giả, để người khác biết cần cấu hình gì.
Ví dụ mẫu tài liệu có thể dùng SERVICE_API_KEY=YOUR_KEY_HERE. Tuyệt đối không thay chỗ giữ chỗ bằng khóa thật trước khi chia sẻ mẫu.
Kiểm tra trước khi đẩy mã
Xem phần thay đổi sắp commit, nhất là tệp cấu hình, nhật ký và mã thử nhanh. Bỏ qua tệp bí mật bằng .gitignore là một lớp phòng ngừa, nhưng không xóa được bí mật đã nằm trong lịch sử Git. Tránh in toàn bộ biến môi trường để tìm lỗi.
Khi nhờ người khác hỗ trợ, che cả khóa trong URL, tiêu đề yêu cầu và phản hồi nếu có. Nên tạo ví dụ tối giản bằng dữ liệu giả thay vì chụp toàn bộ màn hình làm việc.
Nếu khóa đã xuất hiện công khai
Thu hồi hoặc vô hiệu hóa khóa trong dịch vụ trước, rồi tạo khóa thay thế với quyền tối thiểu. Cập nhật nơi đang sử dụng khóa và kiểm tra hoạt động bất thường. Sau đó mới xử lý mã nguồn, lịch sử, nhật ký hoặc bản chụp có chứa khóa. Xóa một dòng trong commit mới không khiến khóa cũ an toàn trở lại.
Điều nên giữ lại
Bảo vệ khóa là kiểm soát quyền sử dụng, không chỉ là giấu một chuỗi ký tự. Dự án nhỏ cũng cần một cách cấp, lưu, thu hồi và thay khóa mà bạn có thể thực hiện rõ ràng khi có sự cố.