Mô hình bảo mật
Proxy được thiết kế cho máy trạm developer đơn người dùng đáng tin cậy. Các ranh giới dưới đây là các giả định cốt lõi — hãy đọc kỹ trước khi triển khai ở bất kỳ nơi nào khác.
Bất biến cố định
Phần tiêu đề “Bất biến cố định”Những điều này không thể thay đổi qua config hoặc biến môi trường:
- Chỉ bind loopback.
127.0.0.1:3817, cố định. Host cố ý không thể cấu hình được. - Giới hạn kích thước body 100 MiB trên inbound request. Phòng chống các client cục bộ không kiểm soát.
- Chuyển tiếp path là 1:1. Không viết lại path, không có allowlist (theo thiết kế — transparent proxy).
X-Git-Remotedo client cung cấp bị xóa trước khi middleware kiểm tra chạy. Một tiến trình cục bộ không thể giả mạo attribution.- Authorization & x-api-key được chuyển tiếp nguyên vẹn. Proxy không xác thực caller; Bifrost thực hiện việc đó.
- Giá trị Authorization không bao giờ được ghi log. Chỉ boolean
has_auth=true/false. - Query string thô không được ghi log. Chỉ
has_query=true/false.
Ranh giới tin cậy
Phần tiêu đề “Ranh giới tin cậy”┌──── Tin cậy ─────┐ ┌────── Không tin cậy ──────┐│ người dùng │ │ mạng ││ IDE của người │ │ bất kỳ LAN host nào ││ dùng │ │ bất kỳ người dùng khác ││ tiến trình cục │ │ trên máy đa người dùng ││ bộ │ └───────────────────────────┘└──────────────────┘Proxy tin tưởng các tiến trình cục bộ trên cùng máy: nó chuyển tiếp bất kỳ header Authorization / x-api-key nào chúng cung cấp.
Những gì proxy KHÔNG bảo vệ chống lại
Phần tiêu đề “Những gì proxy KHÔNG bảo vệ chống lại”- Xác thực trên proxy. Không có. Bất kỳ thứ gì đến loopback đều được chuyển tiếp.
- Lưu trữ bí mật. Không có. Proxy không giữ bí mật, không đọc API key; client cung cấp chúng theo từng request trong header.
- Giới hạn tốc độ. Không có. Proxy trong suốt — Bifrost xử lý quota.
- Anti-replay / signing. Không có. Tương tự như trên.
- Thu thập audit. Không có. Log là cục bộ. Telemetry tập trung nằm ngoài phạm vi.
Các biện pháp defense-in-depth trong code
Phần tiêu đề “Các biện pháp defense-in-depth trong code”| Lớp | Chức năng |
|---|---|
| pprof guard | Nếu pprof.enable: true, địa chỉ bind được kiểm tra khi khởi động phải là loopback (127.0.0.1, localhost, ::1). Bind LAN bị từ chối. |
http.MaxBytesHandler | Giới hạn body 100 MiB, áp dụng cho tất cả inbound. |
requestLogger scrub | Authorization, x-api-key, Cookie, Set-Cookie được ẩn (chỉ hiện sự có mặt). |
| Subprocess an toàn với argv | git remote -v, lsof, ps đều dùng exec.CommandContext với Cmd.Dir (không phải git -C cwd) — không có shell, không có interpolation. |
| Timeout guards | 2 giây cho git remote -v và kiểm tra tiến trình; 30 giây ReadHeaderTimeout. |
| Cảnh báo upstream plaintext | Nếu upstream_url bắt đầu bằng http://, proxy ghi log cảnh báo khi khởi động để các cấu hình sai không bị bỏ qua. |
Lưu ý kiểm tra đa nền tảng
Phần tiêu đề “Lưu ý kiểm tra đa nền tảng”- Linux
/proc/<otherUser>/fd/*trả về EACCES — kiểm tra xuyên người dùng cố ý không được hỗ trợ. Proxy sẽ chuyển tiếp đơn giản mà không có headerX-Git-Remote. - macOS dùng
lsof. Nếulsofbị thiếu hoặc bị hạn chế, attribution fallback về không có header. - Windows PEB walk yêu cầu
SeDebugPrivilege(mà LocalSystem có theo mặc định cho service toàn máy). Các tiến trình 32-bit không được hỗ trợ và trả vềErrUnsupportedBitness.
Sắp ra mắt
Phần tiêu đề “Sắp ra mắt”- Kiểm tra peer-UID tùy chọn qua
SO_PEERCRED/LOCAL_PEERCREDđể từ chối các kết nối xuyên người dùng trên Linux/macOS đa người dùng. - Giới hạn kích thước body có thể cấu hình (hiện tại là compile-time constant).