- TL;DR: Thay vì chuyển hướng lời gọi API từ HTTP sang HTTPS, hãy để nó thất bại. Hãy vô hiệu hóa hoàn toàn HTTP hoặc trả về phản hồi lỗi HTTP rõ ràng, và thu hồi các API key được gửi qua kết nối không mã hóa. Đáng tiếc là hiện nay nhiều nhà cung cấp API nổi tiếng vẫn không làm như vậy.
Bối cảnh
- Khi trình duyệt web truy cập một URL HTTP, dịch vụ thường chuyển hướng yêu cầu đó sang trang HTTPS.
- Lưu lượng HTTP ban đầu không được mã hóa, nên dễ bị tấn công man-in-the-middle (MITM) trên đường truyền.
- Các công nghệ như HSTS (HTTP Strict Transport Security) đã được đưa vào để tăng cường bảo mật.
Rủi ro từ một lỗi gõ đơn giản
- Trong lúc làm việc tích hợp với API của bên thứ ba, URL gốc của API đã bị nhập nhầm thành
http:// thay vì https://.
fetch của Node.js đã âm thầm đi theo chuyển hướng sang HTTPS.
- API key có thể đã bị gửi dưới dạng văn bản thuần, tạo ra rủi ro bảo mật.
- Lỗi được phát hiện trong quá trình code review và vấn đề đã được khắc phục.
Nguyên tắc thất bại sớm
- Nếu API chuyển hướng yêu cầu HTTP sang HTTPS, rất dễ bỏ sót những lỗi gõ như vậy.
- Nên tuân theo nguyên tắc thất bại sớm: các lời gọi API không mã hóa phải thất bại một cách rõ ràng.
- Tốt nhất là vô hiệu hóa giao diện HTTP của máy chủ API, hoặc trả về thông báo lỗi cho các yêu cầu HTTP.
Ví dụ từ các API khác
- Nhiều API nổi tiếng trả về thông báo lỗi 403 cho yêu cầu HTTP hoặc vô hiệu hóa giao diện HTTP.
- Tuy nhiên, một số API vẫn tiếp tục chuyển hướng từ HTTP sang HTTPS.
Sự cần thiết của best practice
- Với các ứng dụng hướng đến người dùng, việc chuyển hướng từ HTTP sang HTTPS là điều phổ biến.
- Nhưng với API, việc chuyển hướng từ HTTP sang HTTPS lại có thể gây hại.
- Cần có hướng dẫn rõ ràng dành cho API từ các dự án bảo mật như OWASP.
Kết luận
- Thay vì chuyển hướng từ HTTP sang HTTPS, API nên làm cho các yêu cầu không mã hóa thất bại một cách rõ ràng.
- Nếu API key được gửi qua kết nối không mã hóa, cần thu hồi ngay lập tức.
- Cần cập nhật các best practice về bảo mật API để cung cấp hướng dẫn rõ ràng.
Ý kiến của GN⁺
- Cần tăng cường bảo mật: Bảo mật API là yếu tố rất quan trọng, và việc chuyển hướng từ HTTP sang HTTPS có thể tạo ra lỗ hổng bảo mật.
- Nguyên tắc thất bại sớm: Điều quan trọng là phải tuân theo nguyên tắc thất bại sớm để có thể phát hiện và sửa lỗi ngay từ giai đoạn đầu phát triển.
- Cập nhật best practice: Các dự án bảo mật như OWASP cần cung cấp hướng dẫn rõ ràng về bảo mật API.
- Thu hồi key tự động: Các API key được gửi qua kết nối không mã hóa nên được tự động thu hồi.
- Tham khảo ví dụ từ API khác: Cần tham khảo các thực tiễn bảo mật của các API khác để tăng cường bảo mật cho chính API của mình.
5 bình luận
Có vẻ đây là lĩnh vực cần được quản lý bằng pháp luật.
Trước hết, ghi chú lại... cấm chuyển hướng sang https trong API
Về mặt kỹ thuật thì nội dung này là đúng,
nhưng ở đa số client doanh nghiệp, do yêu cầu bảo mật nên đã có chỉ thị rằng khi truy cập bằng http thì phải luôn trả về chuyển hướng sang https.
Ngoài ra, họ cũng ngại việc hiển thị màn hình lỗi cho khách hàng sử dụng site của mình, nên nếu không phải là nơi tự vận hành dịch vụ thì từ phía đơn vị cung cấp mà nói, có lẽ đây là câu chuyện khá xa vời..
Trời ơi, AI lại mắc lỗi này nữa haha. Tôi đã sửa lại rồi.
Ý kiến trên Hacker News