feat: 实现 WebDAV
This commit is contained in:
23
README.md
23
README.md
@@ -18,7 +18,7 @@ AFI(Agile File Interface) 是 Go 编写的轻量级文件服务器, 是基于 Go
|
||||
- 基本的用户管理系统 (基于 HTTP Basic Authication), 我们移除了 Gossa 单一的只读/可写模式 (即 -ro 参数), 并保留了未登录状态下的默认只读模式
|
||||
- 支持跳过隐藏项目 (以 `.` 开头的文件/目录)
|
||||
- 开发/生产模式分离, 便于免编译重载前端资源
|
||||
- 同时提供简易的 RPC 调用接口便于编程与 webdav 接口(TODO)便于挂载, 网页用户界面的 JavaScript 使用前者
|
||||
- 同时提供简易的 RPC 调用接口, 并加入了 WebDAV 接口便于编程与挂载, 网页用户界面的 JavaScript 使用前者
|
||||
- 低占用高性能, 网页用户界面每秒可承受万级以上响应并持续保持毫秒级低延迟, 接口性能更高
|
||||
- 默认启用 gzip 压缩, 并为 iframe 嵌入优化
|
||||
- 性能高效, 提供毫秒级响应, 用户使用体验不让位于技术审美与性能
|
||||
@@ -26,10 +26,9 @@ AFI(Agile File Interface) 是 Go 编写的轻量级文件服务器, 是基于 Go
|
||||
|
||||
## 安全与不安全设计
|
||||
|
||||
考虑到此程序可能被使用的场景与便于方案选型, 笔者必须指出此程序存在的问题, 以免您产生虚假的安全感
|
||||
考虑到此程序可能被使用的场景与便于方案选型, 笔者在此指出此程序存在的问题, 以免产生虚假的安全感
|
||||
如果您在为安全性抉择是否使用此项目, 我们高度建议您不要使用它
|
||||
如您发现了其他可能的漏洞, 请在 issues 指出, 若属实, 笔者会将其修复或加入下方列表, 并且将您的名字加入致谢名单
|
||||
注意: 请不要把"文档写出来了"等同于"只有这些问题"(我们当然追求安全审计文档的完善度)
|
||||
|
||||
安全建议:
|
||||
|
||||
@@ -49,7 +48,7 @@ AFI(Agile File Interface) 是 Go 编写的轻量级文件服务器, 是基于 Go
|
||||
|
||||
不安全设计:
|
||||
- 不能防范且无法容忍的攻击
|
||||
- 如上文所述, 这里没写不等于没有, 欢迎通过 issues 提出
|
||||
- 没发现, 但这里没写不等于没有, 欢迎通过 issues 提出
|
||||
- 未防范但几乎不可能成功的攻击
|
||||
- Timing Attack (未防范, 密码在后端明文比较, 但可通过设置较不寻常的用户名规避) -> 我们未来大概率不会改
|
||||
- 能防范的攻击
|
||||
@@ -63,7 +62,7 @@ AFI(Agile File Interface) 是 Go 编写的轻量级文件服务器, 是基于 Go
|
||||
- DoS 攻击 - 我们认为这件事应该由 nginx 反向代理预防
|
||||
- 请求大小和配额无限制导致的超大文件占用和可能导致的 OOM 崩溃 - 我们认为这件事应该由 nginx 反向代理或磁盘配额限制预防, 并且就事实而言, 内部威胁不在模型内, 这很大程度上是有权限的用户行为不当引起的问题
|
||||
- 无自带的响应超时: 可能招致 Slowloris 服务瘫痪 - 但这可由 nginx 反向代理预防
|
||||
- 权限提升风险: AFI 以什么用户运行, 就有什么权限 -- 如果以 root 运行且将分享目录设置为根目录, 则任何登录用户都能删除系统, 或者通过上传 `.ssh/authorized_keys` 或 `.bashrc` 远程控制您的服务器操作系统 -> 我们改不了
|
||||
- 权限提升风险: AFI 以什么用户运行, 就有什么权限 - 如果以 root 运行且将分享目录设置为根目录, 则任何登录用户都能删除系统, 或者通过上传 `.ssh/authorized_keys` 或 `.bashrc` 远程控制您的服务器操作系统 -> 我们改不了
|
||||
- 未默认杜绝的隐私问题:
|
||||
- 外部字体 Referer 泄露 (仅会得知您访问的链接, 但如果您需要, 可以移除前端中引用的在线字体链接) 就事实而言, 我们认为外部字体提供商不太可能有收集这种数据的动机, 但如果您在高敏感内网部署, 则您可能不希望任何外部服务能够得知内网的文件结构
|
||||
- 日志可能泄漏敏感信息 (可以通过修改源代码编译解决, 但我们提供的二进制释出没有移除敏感信息输出)
|
||||
@@ -115,18 +114,18 @@ export GOBIN=$GOPATH/bin/
|
||||
```text
|
||||
Test Platform: AMD Ryzen 3600X, tmpfs, 12 item with DESCRIPT.ION in directory
|
||||
OS: glibc linux-zen 6.19.10
|
||||
Date: 2026-04-02
|
||||
Date: 2026-04-02, 04-12
|
||||
Version: latest
|
||||
Command: wrk -t8 -c50 -d15s http://addr/
|
||||
Test Address: /
|
||||
|
||||
QPS Performace from test:
|
||||
Server QPS Data QPS Bar (higher is better) Gzip Page
|
||||
Nginx 60,242 QPS ████████████████████████████████ Disabled Default Index
|
||||
Apache 34,207 QPS █████████████████░░░░░░░░░░░░░░░ Disabled Default Index
|
||||
AFI 15,262 QPS ████████░░░░░░░░░░░░░░░░░░░░░░░░ BestSpeed Full-functional web file manager (without CSS & JS embedded in bench) (net/http)
|
||||
PyPy 4,169 QPS ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Disabled Default Index (http.server)
|
||||
CPython 2,128 QPS █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Disabled Default Index (http.server)
|
||||
Server QPS Data QPS Bar (higher is better) Gzip Version Page
|
||||
Nginx 60,242 QPS ████████████████████████████████ Disabled 1.28.3 Default Index
|
||||
Apache 34,207 QPS █████████████████░░░░░░░░░░░░░░░ Disabled 2.4.66 Default Index
|
||||
AFI 15,262 QPS ████████░░░░░░░░░░░░░░░░░░░░░░░░ BestSpeed 26.4.3 Web Interface (without CSS & JS embedded in bench) (net/http)
|
||||
PyPy 4,169 QPS ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Disabled 7.3.21 Default Index (http.server)
|
||||
CPython 2,128 QPS █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Disabled 3.14.3 Default Index (http.server)
|
||||
|
||||
Latency from the same test:
|
||||
Server Average Latency Bar (lower is better) Maximum
|
||||
|
||||
Reference in New Issue
Block a user