核心用法
Intranet 是一款轻量级本地 HTTP 文件服务器,基于 Python 3 实现,无需安装 Apache/Nginx,也无需 root 权限即可运行。用户通过 intranet.py start 命令启动服务,默认监听 127.0.0.1:8080,支持自定义端口与主机地址。核心功能围绕静态文件服务、插件目录挂载和可选的 CGI 动态脚本执行展开。
静态文件服务:将文件放入 {workspace}/intranet/www/ 目录即可通过 HTTP 访问,config.json 配置文件位于 webroot 之外,确保敏感配置永不暴露。
插件系统:通过 config.json 将外部目录挂载到 URL 前缀,支持两种模式——无 hash 的静态挂载(仅提供文件)和有 hash 的 CGI 挂载(允许执行 index.py)。插件路径必须位于 workspace 内,防止目录遍历。
CGI 扩展(默认关闭):启用后,仅 index.py 可作为 CGI 入口执行。Webroot 中各子目录的 index.py 处理该目录请求;插件根目录的 index.py 处理插件所有子路径。所有其他 .py 文件返回 403,杜绝任意代码执行。插件 CGI 需配置 SHA-256 哈希校验,脚本变更后必须更新 hash。
访问控制:支持基于 --token 的 Bearer Token 认证(浏览器通过 URL 参数获取 cookie,API 使用 Authorization 头)和 allowed_hosts 主机白名单。默认绑定 loopback,如需 LAN 访问必须同时启用 token 认证与白名单。
显著优点
1. 零依赖轻量部署:纯 Python 标准库实现(仅需 python3),单脚本启动,无配置即可运行。
2. 安全设计优先:CGI 默认关闭、路径严格限制在 workspace、配置文件隔离、插件需显式注册、非 index.py 的 Python 文件完全禁止访问。
3. 灵活扩展:插件机制允许在不修改核心代码的情况下扩展功能,CGI 支持轻量动态内容生成。
4. 细粒度访问控制:Token 认证与主机白名单组合,满足从本地开发到受限内网共享的多场景需求。
潜在缺点与局限性
- 性能边界:单进程 HTTP 服务器,无并发优化,高负载或大流量场景不适用。
- CGI 开销:每次请求 fork 新进程,频繁动态请求时延迟较高;30 秒执行超时限制复杂计算任务。
- 生态系统局限:插件需自行开发,无现成生态;CGI 模式仅支持 Python 入口脚本。
- 安全维护成本:插件 CGI 的 hash 校验要求开发者手动维护校验值,脚本更新时若遗忘更新 config 将导致服务中断。
- 无 HTTPS 原生支持:需额外反向代理(如 nginx)才能实现加密传输。
适合人群
- 本地开发者:快速预览静态站点、测试前后端分离应用的本地 API。
- 小型团队/家庭内网:在可信网络内共享文件或轻量工具,配合 token 认证实现基础访问控制。
- 自动化工作流:作为 CI/CD 管道中的临时文件服务,或嵌入式设备的轻量管理界面。
- 教育/原型验证:学习 HTTP 服务器原理、CGI 机制的安全教学场景。
常规风险
- CGI 启用后的代码执行风险:若攻击者能够修改
index.py且未触发 hash 校验失败,可获得服务器执行权限。建议严格限制 workspace 文件权限,定期校验插件 hash。 - Token 泄露:URL 中的 token 可能被浏览器历史、代理日志记录,使用后应及时清理。
- LAN 暴露风险:
--host 0.0.0.0配合弱 token 或缺失allowed_hosts可能导致未授权访问。生产环境建议始终置于反向代理后,不直接暴露服务端口。 - 路径遍历与符号链接:虽已实现路径 containment 检查,但复杂符号链接场景仍需谨慎审计。