23 điểm bởi GN⁺ 2024-05-29 | 5 bình luận | Chia sẻ qua WhatsApp
  • 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

 
wkang586 2024-06-03

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

 
koxel 2024-05-31

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..

 
thxgeeknews 2024-05-29

Trong lúc tích hợp với API của bên thứ ba, tôi đã nhập nhầm URL cơ sở của API thành https:// thay vì http://.
Có vẻ như http <-> https đã bị đảo ngược.

 
xguru 2024-05-29

Trời ơi, AI lại mắc lỗi này nữa haha. Tôi đã sửa lại rồi.

 
GN⁺ 2024-05-29
Ý kiến trên Hacker News
  • OpenAI API đã được cập nhật để trả về lỗi 403 đối với các yêu cầu HTTP.
  • Cách làm của Stack Exchange API là tốt: thu hồi các khóa API được gửi qua HTTP và trả về thông báo lỗi.
  • Cần cẩn thận để không tự động cấu hình chuyển hướng từ HTTP sang HTTPS.
  • Việc cURL mặc định không tự động theo chuyển hướng là có chủ đích và là một mặc định tốt.
  • Điều quan trọng là chặn truy cập HTTP và chỉ cung cấp HTTPS.
  • Thật đáng ngạc nhiên khi "Provider B" trả lời rằng tấn công MITM nằm ngoài phạm vi chương trình.
  • Có thắc mắc liệu việc nghe lén HTTP có phải là một dạng tấn công MITM hay không.
  • Hy vọng theo thời gian, HTTPS và bản ghi DNS SVCB có thể thay thế việc chuyển hướng HTTP truyền thống ở phía máy chủ.
  • Các nhà cung cấp API nên kiểm tra nhật ký truy cập HTTP trong quá khứ để xem việc dùng HTTP thuần văn bản phổ biến đến mức nào.
  • Nhiều API được lưu trữ phía sau tường lửa ứng dụng web có quy tắc mặc định là tự động chuyển hướng sang HTTPS.
  • API không nên tự động chuyển hướng từ HTTP sang HTTPS, và các thư viện phía máy khách cũng không nên mặc định theo chuyển hướng.
  • Thiết lập chuyển hướng từ HTTP sang HTTPS giúp giảm lưu lượng truy cập về lâu dài.
  • Trong hạ tầng, người ta thường thiết lập chuyển hướng để nhanh chóng xử lý các vấn đề do gõ sai URL.