本地服务安全检查表 · 更新 2026-07-05

Local Service Security Checklist:localhost Binding、Authentication、CORS、Origin Policy、WebSockets、Ports、Lifecycle 与 Incident Logging

面向 desktop apps、agent tools、self-hosted utilities 与 container-backed local APIs 的实用安全检查表,覆盖本机 HTTP/WebSocket services。

Local services 常因为运行在 developer machine 上而被过度信任,这个假设并不安全。Browser tab、malicious extension、compromised desktop renderer、其他 local process、container、LAN peer,或错误 port publication 都可能在不同 binding、authentication、browser policy 与 network configuration 下访问本地 HTTP/WebSocket endpoint。

这份 checklist 把 Docker Desktop、Podman、Colima、Apple container、Tauri、Electron 与 DeerFlow 连成一个 local-service threat model:窄 bind、认证 privileged operations、验证 browser origins、单独保护 WebSocket handshake/messages、盘点 published ports、把 discovery 与 authorization 分离、限制 container/host access、清理 service state,并保留足够 incident evidence。

RepoDaily 判断

不要把 loopback 当 authentication,也不要把 CORS 当 authorization。Production-quality local service 应具备 explicit bind policy、在存在 privilege 时使用 per-client/per-session authentication、对 browser-facing flow 做 strict origin validation、单独的 WebSocket controls、narrow APIs、bounded payloads/rate limits、确定性的 startup/shutdown、port/endpoint inventory、container publication review,以及不会泄露 secrets 的 incident logs。

快速矩阵

表面基线规则失败信号保留证据
Bind address只绑定 use case 需要的 interfacesLocal-only service 默认 0.0.0.0 或 [::]Configured address、actual sockets、owner
Authentication即使 localhost 也认证 privileged calls只要网络可达就能执行操作Auth method、token scope、rotation path
CORSBrowser clients 使用 exact origin allowlistWildcard origin 或 reflected Origin + credentialsAllowed origins 与 negative tests
Origin validationBrowser/WebSocket handshake 验证完整 scheme/host/portSubstring matching 或无 Origin checkOrigin policy 与 rejection logs
WebSockets认证 handshake/session 并验证每条 messageSocket 建立后无 message authorizationHandshake checks、message schema、max payload
Port publication仅发布 required ports 并窄绑定Container port 意外对 LAN 可达Port inventory 与 network scan result
Port discoveryDiscovery 只说明位置,不代表 authority找到 port 就能控制 serviceDiscovery mechanism 与 auth boundary
API surface暴露 narrow task operationsGeneric shell/filesystem/SQL/proxy/arbitrary fetchEndpoint inventory 与 denied tests
Lifecycle按需 start、可预测 stop、清理 credentials/temp stateZombie service 或 stale token 在 app exit 后继续有效PID/session owner、shutdown test、cleanup proof
Logging记录 security events 并 redaction无 auth failure trace 或 logs 含 token/payload secretsEvent schema、retention、redaction test
ContainersReview published ports、mounts、sockets、network reachabilityBroad host mount 或 daemon socket 可由 local API 触达Runtime config 与 privilege review

Local service 准备度评分卡

在连接 desktop UI、browser flow、agent runtime 或 container-backed app 前先评分。

控制项0 分1 分2 分Owner 问题
Network exposureAll interfacesLoopback configuredLoopback/explicit interface + socket/scan evidenceHost 与 LAN 中谁能访问?
AuthenticationNoneShared static tokenScoped session/client auth + rotation + expiry什么证明 caller 有权?
Browser origin policyAny originManual allowlistExact allowlist + tests + separate credential policy哪些网站能调用 service?
WebSocket securityNo checksHandshake auth onlyOrigin + auth + per-message authorization + limitsSocket 建立后如何继续授权?
API least privilegeGeneric powerful APISome wrappersNarrow typed operations + validation + denied testsClient 真正需要的最小 operation 是什么?
Container boundaryBroad mounts/socketSome restrictionsExplicit ports/mounts/networks,无 unnecessary daemon socketService compromise 能否变成 host compromise?
LifecycleAlways-on/zombie riskManual cleanupOwned startup/health/shutdown/token invalidation/cleanup谁负责 stop 和 reset?
Incident evidenceNo useful logsRequest logs onlyAuth/origin/admin events + correlation IDs + redaction能否重建 unauthorized action?

30 分钟 Local Service Security Test

在 browser、desktop renderer、agent 或 container workflow 接入 local service 前运行。

0–5 分钟:映射 listeners

列出 IPv4/IPv6 sockets、protocols、bind addresses、published ports、intended clients 与 owners。

成功标准每个 listener 都有 explicit purpose 与 expected reachability。

5–10 分钟:测试 network reachability

从 host、另一个 local process context 与 LAN peer(适用时)进行 probe。

成功标准Actual exposure 与 documented bind policy 一致。

10–15 分钟:攻击 browser boundaries

从 unapproved origin 测试 HTTP、credentialed request、preflight 与 WebSocket handshake rejection。

成功标准Unauthorized origins 不能执行 privileged actions 或建立 trusted sockets。

15–20 分钟:测试 auth/message scope

尝试 missing、expired、wrong-scope、replayed、malformed credentials 与 unauthorized actions。

成功标准Service 在 side effect 前拒绝并记录 usable evidence。

20–25 分钟:检查 containers 与 powerful bridges

Review mounts、sockets、published ports、arbitrary fetch、shell、filesystem 与 container-control methods。

成功标准不存在不必要的 local API compromise → broad host privilege 路径。

25–30 分钟:演练 shutdown 与 evidence

退出 UI、crash/restart service、invalidate tokens,检查 stale sockets、temp state 与 security logs。

成功标准Service 回到 known state,incident evidence 有用且不泄露 secrets。

Local Service Security Review Flow

  1. 先分类 service:desktop companion API、agent gateway、local model endpoint、browser automation bridge、container-backed database/API、self-hosted dashboard 或 device-control service。
  2. 映射每个 caller:packaged renderer、normal browser tab、extension、CLI、mobile device、LAN peer、container、VM 与其他 local process。不要假设只有预期 UI 能连接。
  3. 记录 IPv4/IPv6 的 actual bind addresses 与 published ports,并从 host 与另一个 LAN machine 验证,而不是只相信 config text。
  4. 把 reachability 与 authorization 分离。Loopback、random ports、process ownership、service discovery 可以降低 exposure,但不能替代 privileged operations 的 authentication。
  5. Browser clients 定义 exact allowed origins 与 credential behavior。CORS 是 browser policy,不是 API authorization;WebSocket Origin 单独验证。
  6. 盘点 endpoints/messages,把 generic shell、filesystem、arbitrary URL fetch、SQL、proxy、container-control methods 替换为 narrow operations 与 validated schemas。
  7. Review rate limits、payload limits、timeouts、connection caps、CSRF-like browser flows、DNS rebinding assumptions、redirects 与 protocol upgrades。
  8. Container-backed services 检查 published ports、bridge networks、host mounts、runtime sockets、credentials,以及 sibling containers 能否触达 sensitive endpoints。
  9. 测试 startup、crash、restart、app exit、sleep/wake、token expiry、stale sockets、port reuse,以及 temp files、caches、sessions、logs cleanup。
  10. 定义 incident evidence:auth failures、origin rejects、privileged actions、config changes、lifecycle events、correlation IDs 与 redaction/retention policy。

场景表

场景必需控制停止条件
Desktop app companion APILoopback、per-session auth、exact renderer origin、narrow methods、app-owned lifecycle任意 local webpage/process 可 unauthenticated 调 privileged methods
Browser-to-localhost developer toolExplicit origin allowlist、CSRF-resistant auth、no wildcard credentials、strict scopeArbitrary website 可触发 local state changes
Local WebSocket agent gatewayOrigin validation、authenticated handshake、per-message authorization、payload/connection limitsAny origin 可连接或 socket 可执行 unrestricted messages
Container-backed local APIExplicit loopback publication、no unnecessary LAN bind、scoped credentials、mount/socket reviewPublished port 或 daemon socket 暴露 host-level privilege
Self-hosted dashboard on LANExplicit LAN bind、real user auth、TLS where appropriate、session controls、rate limits、audit events把 LAN reachability 当 identity
Local model endpointSensitive prompt/data auth、request limits、retention policy、no broad file/tool proxyAny local process 可 exfiltrate context 或 invoke tools
Temporary test serverRandom/reserved port、loopback、short lifetime、no prod secrets、deterministic cleanupTest 后 server 仍存在或 bind all interfaces
Agent controlling containersNarrow broker API、explicit allowed actions、no daemon socket exposure、action logsCompromised client 可创建 privileged containers 或 arbitrary host mounts

Local service 风险检查表

Loopback equals trust

其他 local processes 与 browser-mediated attacks 仍可能访问 localhost。Loopback 缩小 network exposure,但不认证 caller。

CORS as access control

CORS 由 browser 执行,non-browser client 不受其约束;permissive config 还可能暴露 privileged local APIs。

WebSocket origin gap

Service 可能保护 HTTP endpoints,却接受任意 origin 的 WebSocket handshake,形成 cross-site request channel。

Published port surprise

Container port publication 在未指定窄 host IP 时,可能让 local service 对 localhost 之外的 interface 可达。

Random port security myth

Unpredictable port 只能降低 accidental discovery,不能代替 auth,因为 malware、logs、process inspection、browser behavior 或 scans 都可发现。

Generic local admin API

Arbitrary shell、filesystem、URL、SQL、container operations 或 proxy endpoints 会把小 local service 变成 broad privilege bridge。

Zombie service and stale token

Background process、crash recovery、sleep/wake 与 failed shutdown 会让 reachable service/token 在 UI exit 后继续存在。

Sensitive incident logs

捕获 Authorization headers、session tokens、prompts、file contents 或 WebSocket payloads 的 debug logs 会形成第二条 data exposure channel。

Local service 实现模式

Loopback plus authentication

Loopback 降低 network reachability,独立 authentication mechanism 证明 client authority。

Exact origin allowlist

比较完整 normalized origin,包括 scheme、host、port,拒绝 substring/suffix tricks。

Session-scoped capability token

使用绑定 service instance、client 或 capability 的短生命周期 token,不使用永久 machine-wide secret。

Narrow broker API

暴露 startTask、openProject、renderPreview、runApprovedJob,而不是 exec、readAnyFile、proxyUrl 或 raw daemon operations。

Port inventory as build artifact

维护 machine-readable listeners、protocols、bind addresses、auth requirements、owners 与 intended clients 清单。

Lifecycle owner

让单一 parent process/service manager 负责 startup、health、shutdown、token invalidation 与 cleanup。

Security event log

记录 auth failures、origin rejects、privileged actions、config changes、restarts、abnormal disconnects,并使用 correlation IDs/redaction。

FAQ

面向 localhost 与 LAN services 运营团队的简短回答。

绑定 127.0.0.1 是否足够?

不够。它是重要 network boundary,但 privileged operations 仍需要 authorization model,因为其他 local process 与 browser-mediated attack paths 可能访问 localhost。

CORS 能保护 local API 吗?

不能单独做到。CORS 由 browser 强制,不认证 caller。Browser flow 使用 strict origins,同时对 privileged APIs 使用真实 authentication/authorization。

WebSocket 是否需要单独 security review?

需要。Handshake 验证 Origin、认证 connection、授权 message actions、验证 schemas、限制 payload/rate,并记录 security events。

Random local port 是安全控制吗?

可以降低 collisions 与 casual discovery,但不应成为主要 auth boundary。Port 可通过 scans、logs、process inspection、browser behavior 或 compromised local software 被发现。

为什么要 review container port publication?

原本只给 host 使用的 service 可能因 publication settings 与 host configuration 对 LAN/其他网络可达,应验证 actual bind scope。

Local-service logs 应包含什么?

记录 auth failures、rejected origins、privileged operations、config changes、lifecycle events、errors 与 correlation IDs,同时 redaction tokens、secrets 与 sensitive payloads。

相关雷达

Infrastructure & Runtime 雷达

相关 RepoDaily briefs

Sources

  1. MDN Cross-Origin Resource Sharing
  2. MDN Same-origin Policy
  3. MDN Local Network Access
  4. OWASP WebSocket Security Cheat Sheet
  5. OWASP Testing WebSockets
  6. Docker Port Publishing
  7. Docker daemon socket warning
  8. Podman run documentation
  9. RepoDaily Desktop Runtime Security Checklist
  10. RepoDaily Containerized Agent Workspace Blueprint

Feedback

这页是否帮助你做出决定?

匿名反馈只用于判断内容是否真正有用。

报告过期或缺失的证据