用于聚合来自 HackerOne、Bugcrowd、Intigriti 和 YesWeHack 的漏洞赏金计划范围的 Web 界面和 API。
cd website
cp .env.example .env
# 编辑 .env — 至少设置 POSTGRES_PASSWORD 和你的平台凭证
docker compose up -d --build
站点将通过 https://yourdomain.com 访问(Caddy 通过 Let's Encrypt 自动处理 HTTPS)。
如果你的服务器位于 Cloudflare 之后(代理 DNS),标准的 HTTP ACME 挑战将无法工作。请改用 Cloudflare compose 文件,它会构建一个包含 Cloudflare DNS 插件的自定义 Caddy:
docker compose -f docker-compose.cloudflare.yml up -d --build
在 .env 中设置 CF_API_TOKEN。在 https://dash.cloudflare.com/profile/api-tokens 创建令牌,并赋予你的域名 Zone:DNS:Edit 权限。
要求:Go 1.24+,以及一个运行的 PostgreSQL 实例。
DB_URL="postgres://postgres:yourpassword@localhost:5432/bbscope?sslmode=disable" \
go run *.go serve --dev --poll-interval 0 --listen localhost:7001
--dev 标志启用仅 HTTP 模式(无 TLS)。--poll-interval 0 禁用后台轮询,因此你不需要平台凭证。
数据库连接从环境变量 DB_URL 或 ~/.bbscope.yaml 中的 db_url 读取。
所有平台凭证均为可选。未配置的平台在轮询期间将被跳过。
设置 OPENAI_API_KEY 和可选的 OPENAI_MODEL(默认为 gpt-4.1-mini)以启用基于 AI 的范围目标标准化。每个目标会缓存以减少 API 调用。
要使用 HTTP 基本认证保护站点:
生成密码哈希:
docker run --rm caddy:2-alpine caddy hash-password --plaintext 'yourpassword'
将示例配置复制到 conf.d/:
cp basicauth.caddy.example conf.d/basicauth.caddy
编辑 conf.d/basicauth.caddy 并添加你的用户名和哈希:
basic_auth {
myuser $2a$14$hashgoeshere...
}
重启 Caddy:docker compose restart caddy
要禁用,删除 conf.d/basicauth.caddy 并重启。
caddy (ports 80/443) → bbscope-web (:8080) → postgres
conf.d/*.caddy 中的额外配置片段会被自动导入。站点提供了一个公开的 API:
查询参数:scope(in/out/both)、platform、type、raw(跳过 AI)、format(json/text)。
默认输出为换行分隔的文本;添加 format=json 以获取 JSON。响应会缓存 5 分钟。
| 标志 | 默认值 | 描述 |
|---|
--dev, -d | false | 开发模式(HTTP,无 TLS) |
--poll-interval | 6 | 轮询周期间隔小时数(0 表示禁用) |
--listen | :8080 | HTTP 监听地址 |
--domain | bbscope.com | 站点地图/robots.txt 的域名 |
| 平台 | 环境变量 | 备注 |
|---|
| HackerOne | H1_USERNAME, H1_TOKEN | API 令牌 |
| Bugcrowd | BC_EMAIL, BC_PASSWORD, BC_OTP | 或设置 BC_PUBLIC_ONLY=1 仅限公开项目 |
| Intigriti | IT_TOKEN | Bearer 令牌 |
| YesWeHack | YWH_EMAIL, YWH_PASSWORD, YWH_OTP | 邮箱 + 密码 + OTP |
| 端点 | 描述 |
|---|
GET /api/v1/programs | 列出所有项目 |
GET /api/v1/programs/{platform}/{handle} | 单个项目详情 |
GET /api/v1/targets/{type} | 按类型的目标:wildcards、domains、urls、ips、cidrs |