Bảo mật
Một tích hợp Hạ Tầng giữ nhiều secret: API key, secret ký webhook, mã bí mật định danh của chat và secret key của Thanh toán. Trang này là danh sách kiểm tra để giữ an toàn từng loại, thu hẹp những gì một secret bị lộ có thể làm, và xác minh mọi thứ gửi tới server của bạn.
Các loại thông tin xác thực
| Loại | Dạng | Đặt ở đâu | Bí mật? |
|---|---|---|---|
| API key | ht_... | Chỉ ở server của bạn | Có |
| Secret ký webhook | whsec_... | Chỉ ở server của bạn | Có |
| Mã bí mật định danh của chat | hiện một lần trên trang website | Chỉ ở server của bạn | Có |
| Secret key của Thanh toán | sk_... | Chỉ ở server của bạn | Có |
| Site id của chat | site_... | Trang web và ứng dụng của bạn | Không, công khai |
| Khoá ứng dụng di động | hak_... | Trong bản build ứng dụng | Không, nhưng thu hồi được |
Mọi thứ được đánh dấu bí mật không bao giờ được xuất hiện trong JavaScript chạy trên trình duyệt, ứng dụng di động, plugin công khai, kho Git hay phiếu hỗ trợ. Giữ chúng trong biến môi trường hoặc trình quản lý secret.
API key
- Chỉ cấp cho key những scope nó cần. Server chỉ gửi email cần
email:send, không cần*(Xác thực API). - Mỗi dịch vụ hoặc môi trường một key, đặt tên theo nơi nó chạy. Như vậy bạn thu hồi một key mà không đụng tới key khác, và cột Dùng lần cuối cho biết key nào còn được dùng.
- Giới hạn key. Khoá key email vào một Tên miền gửi. Chỉ khi key buộc phải chạy trong trình duyệt mới điền Origin trình duyệt; request từ origin khác bị từ chối (Key bị giới hạn).
- Xoay key khi người từng biết key nghỉ việc, khi nghi lộ, và theo lịch định kỳ: tạo key mới, triển khai, rồi thu hồi key cũ. Key bị thu hồi ngừng hoạt động trong vòng một phút.
- Kiểm tra việc sử dụng. Email → Logs liệt kê mọi request API kèm key đã gọi, user agent, status và body. Lời gọi hay endpoint lạ là dấu hiệu key bị lộ.
Key chỉ hiện một lần khi tạo. Hạ Tầng chỉ lưu bản băm, nên key bị mất không khôi phục được; hãy tạo key mới.
Webhook
- Xác minh mọi lượt gửi. Kiểm tra chữ ký trên body gốc và từ chối lượt gửi có timestamp cũ quá 300 giây (Webhook). Lượt gửi được xác thực bằng chữ ký, không phải bằng nơi nó xuất phát. Header
user-agent: hatang-webhooks/1.0chỉ mang tính thông tin. - Dùng endpoint HTTPS. Hạ Tầng chỉ gửi tới URL
httpscông khai và không đi theo chuyển hướng. - Xoay secret ký khi nó có thể đã lộ. Trong 24 giờ sau khi xoay, lượt gửi mang chữ ký của cả secret cũ lẫn mới, nên bạn triển khai mà không mất sự kiện.
- Lọc trùng theo
svix-idđể lượt gửi lại hay thử lại không kích hoạt cùng một hành động hai lần. - Lời gọi IPN của Thanh toán tới
ipn_urlđược ký riêng, bằngHatang-Signaturevà secret key của môi trường. Xem Xác minh IPN.
Danh tính trong chat
- Xác minh danh tính. Khi website hoặc ứng dụng cho chat biết người dùng là ai, hãy kèm
hash(HMAC-SHA256 của user id với mã bí mật định danh của site) tính ở server. Không có nó, ai cũng có thể tự nhận là khách hàng khác và đọc lịch sử của họ (Nhận diện khách). - Giữ mã bí mật định danh ở server, và xoay bằng Tạo mới & hiển thị nếu nghi lộ. Hash tạo bằng mã cũ hết hiệu lực ngay.
- Giới hạn nơi widget chạy. Widget chỉ khởi động trên tên miền của website, các tên miền phụ và các Origin được phép thêm bạn liệt kê. Gỡ các origin xem trước và localhost không còn dùng.
- Thu hồi khoá ứng dụng di động không còn dùng, sau khi đã phát hành bản ứng dụng dùng khoá mới.
Thanh toán
- Giữ secret key của từng môi trường ở server và kiểm tra
environmenttrong mọi sự kiện Thanh toán và IPN, để thanh toán development không bao giờ kích hoạt đơn hàng thật. - Key
ht_test_không bao giờ chạm được dữ liệu production. Quyền vào production được chọn theo từng request bằngHatang-Environment(Môi trường Thanh toán).
SMTP relay
SMTP relay tại smtp.hatang.dev:5870 dùng STARTTLS, tên đăng nhập hatang và mật khẩu là một API key. Chỉ cấp cho key đó scope email:send. Sau 10 lần đăng nhập sai từ một địa chỉ IP, relay từ chối mọi lần thử tiếp theo từ địa chỉ đó trong 15 phút.
Đội ngũ
- Cấp cho nhân viên mức quyền thấp nhất đủ để làm việc, và chỉ cấp quyền Developer (tạo được API key và webhook) cho người cần (Nhân viên và phân quyền).
- Gỡ người nghỉ việc ở Cài đặt → Nhân viên, và xoay các API key, secret họ từng biết. Key của họ vẫn chạy cho tới khi bạn thu hồi, vì key không gắn với một người.
Khi một secret bị lộ
- API key: thu hồi ở Cài đặt → API Keys, tạo key thay thế, và xem Email → Logs để tìm các lời gọi không phải của bạn.
- Secret webhook: xoay secret và triển khai secret mới trong vòng 24 giờ.
- Mã bí mật định danh: bấm Tạo mới & hiển thị và cập nhật server.
- Secret key Thanh toán: thay mới ở Cài đặt thanh toán → Khoá tích hợp và cập nhật server.