From 9a8f6b793081bb0e6400c56776b87c6c4d68cec2 Mon Sep 17 00:00:00 2001 From: pluvium27 Date: Sun, 5 Apr 2026 19:30:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E6=98=AF=E6=9B=B4=E6=96=B0=E8=87=AA?= =?UTF-8?q?=E8=BF=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 63 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 9aacb4b..1b8978b 100644 --- a/README.md +++ b/README.md @@ -43,37 +43,38 @@ AFI 是 Go 编写的轻量级文件服务器, 是基于 Gossa 的现代化增强 - 使用普通用户, chroot 或容器运行 -- 安全设计: - - 可防止路径穿越攻击 - - 有基本的权限管理系统 (基于 HTTP Basic Authentication) -- 不安全设计: - - 不能防范且无法容忍的攻击 - - 如上文所述, 这里没写不等于没有, 欢迎通过 issues 提出 - - 未防范但几乎不可能成功的攻击 - - Timing Attack (未防范, 密码在后端明文比较, 但可通过设置较不寻常的用户名规避) -> 我们未来大概率不会改 - - 能防范的攻击 - - XSS 攻击 - - Symlink 逃逸攻击 (可选且默认开启, 但开启后您就不能使用 linux 的符号链接便利了) - - 路径穿越攻击 - - CSRF 攻击 (HTTP Basic Authentication 天然防范) - - 其他不安全设计: - - 密码以明文形式传输 (因此千万不要在非 HTTPS 环境公网部署或预留 HTTP 访问, 除非您完全不配置用户(相当于原版 Gossa 的只读模式)) -> 我们未来会改, 但会在增加 Argon2 的基础上保留明文与 MD5 模式 - - 后端密码参数化 (可登录服务器后轻松用 ps 或类似工具查看), 已经可以环境变量安全设置, 但不会移除 `-auth` 选项以防您需要测试或使用 PaaS 部署 - - DoS 攻击 - 我们认为这件事应该由 nginx 反向代理预防 - - 请求大小和配额无限制导致的超大文件占用和可能导致的 OOM 崩溃 - 我们认为这件事应该由 nginx 反向代理或磁盘配额限制预防, 并且就事实而言, 内部威胁不在模型内, 这很大程度上是有权限的用户行为不当引起的问题 - - 无自带的响应超时: 可能招致 Slowloris 服务瘫痪 - 但这可由 nginx 反向代理预防 - - 权限提升风险: AFI 以什么用户运行, 就有什么权限 -- 如果以 root 运行且将分享目录设置为根目录, 则任何登录用户都能删除系统, 或者通过上传 `.ssh/authorized_keys` 或 `.bashrc` 远程控制您的服务器操作系统 -> 我们改不了 - - 未默认杜绝的隐私问题: - - 外部字体 Referer 泄露 (仅会得知您访问的链接, 但如果您需要, 可以移除前端中引用的在线字体链接) 就事实而言, 我们认为外部字体提供商不太可能有收集这种数据的动机, 但如果您在高敏感内网部署, 则您可能不希望任何外部服务能够得知内网的文件结构 - - 日志可能泄漏敏感信息 (可以通过修改源代码编译解决, 但我们提供的二进制释出没有移除敏感信息输出) - - 未对特定安全需求进行的设计: - - 不自带 https 服务器 - 如果您在公网直接跑这个程序并且使用它, 您等同于裸奔 - - 不支持细粒度权限控制 (我们支持配置多个用户, 但登录后您就只能是对分享目录下的文件完全可写(取决于运行 afi 的用户)的状态了) - - 没有自带的防暴力破解机制 - - 没有操作审计日志 - - 没有密码哈希存储 (后端明文比较) -- 可能被误解为是不恰当的设计 - - 代码中不恰当的注释, 但这些注释(html, js 和 css 中的)事实上会被 go 的 embed 清除(即使有 "dev" tag), 因此您不必担心这些注释会随页面传递给浏览器, 在"查看源代码页"呈现给用户 +安全设计: +- 可防止路径穿越攻击 +- 有基本的权限管理系统 (基于 HTTP Basic Authentication) + +不安全设计: +- 不能防范且无法容忍的攻击 + - 如上文所述, 这里没写不等于没有, 欢迎通过 issues 提出 +- 未防范但几乎不可能成功的攻击 + - Timing Attack (未防范, 密码在后端明文比较, 但可通过设置较不寻常的用户名规避) -> 我们未来大概率不会改 +- 能防范的攻击 + - XSS 攻击 + - Symlink 逃逸攻击 (可选且默认开启, 但开启后您就不能使用 linux 的符号链接便利了) + - 路径穿越攻击 + - CSRF 攻击 (HTTP Basic Authentication 天然防范) +- 其他不安全设计: + - 密码以明文形式传输 (因此千万不要在非 HTTPS 环境公网部署或预留 HTTP 访问, 除非您完全不配置用户(相当于原版 Gossa 的只读模式)) -> 我们未来会改, 但会在增加 Argon2 的基础上保留明文与 MD5 模式 + - 后端密码参数化 (可登录服务器后轻松用 ps 或类似工具查看), 已经可以环境变量安全设置, 但不会移除 `-auth` 选项以防您需要测试或使用 PaaS 部署 + - DoS 攻击 - 我们认为这件事应该由 nginx 反向代理预防 + - 请求大小和配额无限制导致的超大文件占用和可能导致的 OOM 崩溃 - 我们认为这件事应该由 nginx 反向代理或磁盘配额限制预防, 并且就事实而言, 内部威胁不在模型内, 这很大程度上是有权限的用户行为不当引起的问题 + - 无自带的响应超时: 可能招致 Slowloris 服务瘫痪 - 但这可由 nginx 反向代理预防 + - 权限提升风险: AFI 以什么用户运行, 就有什么权限 -- 如果以 root 运行且将分享目录设置为根目录, 则任何登录用户都能删除系统, 或者通过上传 `.ssh/authorized_keys` 或 `.bashrc` 远程控制您的服务器操作系统 -> 我们改不了 +- 未默认杜绝的隐私问题: + - 外部字体 Referer 泄露 (仅会得知您访问的链接, 但如果您需要, 可以移除前端中引用的在线字体链接) 就事实而言, 我们认为外部字体提供商不太可能有收集这种数据的动机, 但如果您在高敏感内网部署, 则您可能不希望任何外部服务能够得知内网的文件结构 + - 日志可能泄漏敏感信息 (可以通过修改源代码编译解决, 但我们提供的二进制释出没有移除敏感信息输出) +- 未对特定安全需求进行的设计: + - 不自带 https 服务器 - 如果您在公网直接跑这个程序并且使用它, 您等同于裸奔 + - 不支持细粒度权限控制 (我们支持配置多个用户, 但登录后您就只能是对分享目录下的文件完全可写(取决于运行 afi 的用户)的状态了) + - 没有自带的防暴力破解机制 + - 没有操作审计日志 + - 没有密码哈希存储 (后端明文比较) +可能被误解为是不恰当的设计: +- 代码中不恰当的注释, 但这些注释(html, js 和 css 中的)事实上会被 go 的 embed 清除(即使有 "dev" tag), 因此您不必担心这些注释会随页面传递给浏览器, 在"查看源代码页"呈现给用户 > 注意: 这些不安全设计并非都是运维或服务器管理员能解决的, 因此请量需求而行