Bỏ qua để đến nội dung

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.

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-Remote do 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.
┌──── 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.

  • 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.
LớpChức năng
pprof guardNế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.MaxBytesHandlerGiới hạn body 100 MiB, áp dụng cho tất cả inbound.
requestLogger scrubAuthorization, x-api-key, Cookie, Set-Cookie được ẩn (chỉ hiện sự có mặt).
Subprocess an toàn với argvgit 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 guards2 giây cho git remote -v và kiểm tra tiến trình; 30 giây ReadHeaderTimeout.
Cảnh báo upstream plaintextNế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.
  • 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ó header X-Git-Remote.
  • macOS dùng lsof. Nếu lsof bị 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.
  • 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).