JoshuaMart/WebSec0

GitHub: JoshuaMart/WebSec0

WebSec0 是一个可自托管的被动式 Web 安全配置扫描器,检测 TLS 配置与 HTTP 安全头并生成含可复制修复建议的实操报告。

Stars: 0 | Forks: 0

![Image](https://github.com/user-attachments/assets/90d66777-7611-4bfc-994c-b4e5de1a469f)

CI CodeQL Go Report Card OpenSSF Scorecard

# WebSec0 **WebSec0** 是一个开源、可自托管的**被动式** Web 安全 配置扫描器。在一个约 15 MB 的单一二进制文件中,它会检查主机的 TLS 配置和 HTTP 安全头,运行一些自定义检查 (`security.txt`、`robots.txt`、……),并生成**包含可直接复制粘贴的修复代码片段且具有实操性的报告**。 为**两类地位平等的用户群体**而构建: - 人类 — 清晰的报告,按 ROI(安全收益 ÷ 工作量)排定优先级 - AI agent — 每个发现都是自包含的(无需外部获取), catalog 通过 `GET /api/v1/checks` 暴露,并附带了一个开箱即用的 [`SKILL.md`](./skills/websec0/SKILL.md) ## 试用 **托管实例:** [www.websec0.com](https://www.websec0.com) — 无需注册, 无需密钥,完全公开。 或直接调用 API: ``` curl -sS -X POST https://www.websec0.com/api/v1/scan \ -H 'Content-Type: application/json' \ -d '{"host":"github.com"}' | jq . ``` 完整的请求/响应契约、错误封装和评分模型都 记录在 [`SKILL.md`](./skills/websec0/SKILL.md) 中 — 专为 AI agent 编写, 但也易于人类阅读。 ## 自托管 拉取并运行已发布的跨架构镜像。默认配置开箱即用: ``` docker run --rm -p 8080:8080 ghcr.io/joshuamart/websec0:latest ``` 打开 。这个无发行版(distroless)镜像大小约为 15 MB,并以 非 root 用户身份运行。要覆盖默认配置(监听地址、速率限制、SSRF 策略、历史记录保留时间),请挂载一个配置文件: ``` docker run --rm -p 8080:8080 \ -v "$(pwd)/websec0.yaml":/etc/websec0/websec0.yaml:ro \ ghcr.io/joshuamart/websec0:latest \ --config /etc/websec0/websec0.yaml ``` 使用 [`websec0.yaml.example`](./websec0.yaml.example) 作为起点 — 每个字段都有详细注释。
自行构建镜像 该仓库提供了两个 Dockerfile。`Dockerfile` 在 Docker 内部构建 Go,这也是 `make docker` 所调用的脚本;`Dockerfile.goreleaser` 是发布流水线使用的最小化纯拷贝运行时。 ``` docker build -t websec0 . docker run --rm -p 8080:8080 websec0 ```
从源码构建 需要 Go 1.26+、Node 22+、pnpm 10+ 和 rsync。 ``` make frontend-install make build ./dist/websec0 ``` `make build` 将内嵌的 Astro bundle 声明为 Make 的先决条件, 因此,只有当 `web/` 下的文件发生更改时,它才会重新构建前端 (并使用 rsync 将其同步到 `internal/frontend/dist/`, 也就是 `//go:embed` 提取它的地方)。 纯粹针对 Go 的迭代构建不会产生任何前端开销。
## 工作原理 ``` flowchart LR User[Web UI · curl · agent] -->|POST /api/v1/scan| API[chi router + rate limit] API --> SSRF[safehttp gate
IP pin · no private · no rebind] SSRF --> Orch[Scanner orchestrator] Orch --> TLS[TLS probe] Orch --> HDR[Headers probe] Orch --> Custom[Custom checks] TLS --> Score[Scoring] HDR --> Score Score --> Result["scan.Result
(2 grades + findings)"] Custom --> Result Result --> User ``` 每个出站请求都会经过 **`safehttp`** 处理:每个目标在 DNS 解析时都会被固定到 单个 IP,RFC 1918 / loopback / link-local 地址将被一律拒绝,并且连接会根据主机进行速率限制。 随后,探测任务并行展开 — 通常一次扫描可以在 ~10 秒内完成。 ## 贡献 请参阅 [`CONTRIBUTING.md`](./CONTRIBUTING.md) 了解开发工作流以及 “添加检查”的三种方式。安全报告请通过 [`SECURITY.md`](./SECURITY.md) 中记录的私密渠道提交。 集成 WebSec0 的 AI agent 应该从 [`skills/websec0/SKILL.md`](./skills/websec0/SKILL.md) 开始。 ## 许可证 代码采用 [MIT](./LICENSE) 许可证。由公开实例生成的报告 遵循 [Creative Commons BY 4.0](https://creativecommons.org/licenses/by/4.0/) 许可协议发布。
标签:Docker, EVTX分析, Go, HTTP安全头, Ruby工具, Snort++, TLS配置检测, Web安全, 安全防御评估, 实时处理, 日志审计, 蓝队分析, 被动扫描, 请求拦截