dz-mykolas/searxng-access

GitHub: dz-mykolas/searxng-access

为 SearXNG 搜索引擎提供基于 Token 的访问控制、权限管理、配额限制和会话撤销功能的安全插件。

Stars: 0 | Forks: 0

# 🔐 SearXNG 访问控制 基于 Token 的访问控制插件,适用于 [SearXNG](https://github.com/searxng/searxng) 支持 API token、权限、配额、浏览器会话以及撤销功能。 ## 🚀 快速开始 ### 1. 启动 ``` mkdir searxng-access && cd searxng-access curl -fsSL \ https://raw.githubusercontent.com/dz-mykolas/searxng-access/main/compose.example.yaml \ -o compose.yaml mkdir core-config docker compose up -d ``` 该镜像已内置 SearXNG,并在全新安装时自动启用访问插件。 示例默认使用 `latest` 标签。为了确保生产环境部署的稳定性和可预测性, 请创建一个本地 `.env` 文件并设置 `SEARXNG_ACCESS_VERSION=0.1.2`。 ### 2. 创建浏览器 token ``` docker compose exec core searxng-access token create \ --label browser --capability search --capability access ``` 打开你的 SearXNG URL 并粘贴生成的 token。该 token 仅显示一次。 ### 3. 创建 API token ``` docker compose exec core searxng-access token create \ --label ai-harness --capability search --limit 1000 --window 3600 ``` ``` curl \ -H 'Authorization: Bearer sxng_REPLACE_ME' \ 'https://search.example.com/search?q=searxng&format=json' ``` 当受限 token 的当前配额窗口耗尽时,将返回带有标准 `Retry-After` header 的 `429 Too Many Requests`。 ## 🌐 配置带自动 HTTPS 的 VPS 对于公网 VPS,请使用 Caddy 示例来代替基础的 Compose 文件。将你的域名 解析到该服务器,并放行入站端口 `80` 和 `443`,然后运行: ``` mkdir searxng-access && cd searxng-access curl -fsSL \ https://raw.githubusercontent.com/dz-mykolas/searxng-access/main/examples/caddy/compose.yaml \ -o compose.yaml curl -fsSL \ https://raw.githubusercontent.com/dz-mykolas/searxng-access/main/examples/caddy/Caddyfile \ -o Caddyfile printf '%s\n' \ 'SEARXNG_HOST=search.example.com' \ 'SEARXNG_ACCESS_VERSION=0.1.2' > .env mkdir core-config docker compose up -d ``` Caddy 会自动获取并续期 HTTPS 证书。仅由 Caddy 暴露主机 端口;SearXNG 仅能在 Compose 网络内部访问。 ## 🛠️ 开发 在 devcontainer 中打开此代码库,或者使用配备了 Python 3.11、`uv`、构建 工具以及 Dockerfile 中指定原生库的 Debian 环境。 ``` make setup make lint test test-integration make run ``` 然后打开 并使用: ``` development-token ``` API 示例: ``` curl \ -H 'Authorization: Bearer development-token' \ http://localhost:8888/config ``` | 路径 | 用途 | | --- | --- | | `.venv/` | 插件工具和单元测试 | | `.searxng/local/py3/` | 指定版本的 SearXNG 和集成测试 | ## 🔑 权限 | 权限 | 访问范围 | | --- | --- | | `search` | 搜索、自动补全、图片和网站图标 (favicons) | | `access` | 偏好设置、信息和浏览器账户路由 | | `admin` | 指标和详细的引擎错误信息 | | `*` | 所有已分类的权限 | 浏览器 token 通常需要 `search` + `access` 权限。仅用于搜索的 API 客户端只需要 `search` 权限。未知的路由在明确分类之前将拒绝访问(失败关闭)。 ## 🎛️ Token 管理 ``` # List tokens docker compose exec core searxng-access token list # 撤销 token 及其浏览器会话 docker compose exec core searxng-access token revoke TOKEN_ID # 查看聚合使用计数器 docker compose exec core searxng-access usage ``` ## ⚙️ 配置 | 变量 | 默认值 | 用途 | | --- | --- | --- | | `SEARXNG_ACCESS_DB` | 镜像内为 `/var/cache/searxng/access.db` | 数据库路径 | | `SEARXNG_ACCESS_SECURE_COOKIE` | `true` | 仅限 HTTPS 的浏览器 cookie | | `SEARXNG_ACCESS_SESSION_IDLE` | `28800` | 空闲超时时间(秒) | | `SEARXNG_ACCESS_SESSION_LIFETIME` | `604800` | 最大会话生命周期 | ## 🛡️ 安全概览 - 原始 token 和会话 ID 绝不存储——仅保存 SHA-256 哈希值。 - 浏览器 cookie 默认为 `HttpOnly`、`SameSite=Lax` 和 `Secure`。 - 撤销 token 同时会使通过该 token 创建的浏览器会话失效。 - 使用量计数器中绝不包含搜索查询内容。 - SQLite 中包含 token、会话、配额窗口和汇总使用量。 - 请勿将 `Authorization` 和 `X-API-Key` 的值保留在代理和调试日志中。 - 部署后,请确认缺失和无效 token 的 API 请求是否均返回 `401`。 ## 📦 容器镜像 版本标签会发布已通过测试的 `linux/amd64` 和 `linux/arm64` 镜像至: ``` ghcr.io/dz-mykolas/searxng-access:0.1.2 ghcr.io/dz-mykolas/searxng-access:latest ``` 发布工作流会运行单元测试和 SearXNG 集成测试,然后发布 SBOM 和来源证明。维护者必须首次将 GHCR 包公开一次, 以便 VPS 用户可以匿名拉取。 ## 📄 许可证 [GNU AGPL-3.0-or-later](LICENSE)
标签:API令牌, SearXNG, Streamlit, 插件, 访问控制, 请求拦截, 逆向工具, 限流配额