Chuyển tới nội dung chính

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ạiDạngĐặt ở đâuBí mật?
API keyht_...Chỉ ở server của bạnCó
Secret ký webhookwhsec_...Chỉ ở server của bạnCó
Mã bí mật định danh của chathiện một lần trên trang websiteChỉ ở server của bạnCó
Secret key của Thanh toánsk_...Chỉ ở server của bạnCó
Site id của chatsite_...Trang web và ứng dụng của bạnKhông, công khai
Khoá ứng dụng di độnghak_...Trong bản build ứng dụngKhô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.0 chỉ mang tính thông tin.
  • Dùng endpoint HTTPS. Hạ Tầng chỉ gửi tới URL https cô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ằng Hatang-Signature và 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 environment trong 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ằng Hatang-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ộ​

  1. 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.
  2. Secret webhook: xoay secret và triển khai secret mới trong vòng 24 giờ.
  3. Mã bí mật định danh: bấm Tạo mới & hiển thị và cập nhật server.
  4. 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.

Bước tiếp theo​

Xem trang này dạng Markdown