我们的安全实践

最后更新:2026 年 11 月 1 日

GeckoFlag 是运行在客户自己服务器上的软件。为了让您能够放心地托付项目信息,开发者会在每次发布时亲自进行安全检查,并在本页面公开检查的内容和结果。

本页面是开发者自行检查的记录并非第三方机构的认证或审计。我们同时公开了具体检查了哪些内容,可作为您决定是否引入的参考。

设计层面的安全措施

GeckoFlag 默认内置以下措施,均无需任何设置即可生效。

密码保护

密码不以明文保存,而是使用 bcrypt 进行哈希处理后保存。密码重置令牌同样经哈希处理后保存,并且限制重置申请的次数。

登录尝试限制

按账号和连接来源 IP 地址两个维度统计登录失败次数,超过一定次数后暂时限制登录。以此抑制暴力破解攻击以及针对大量账号的攻击。

CSRF 防护

对所有表单提交验证令牌,防止来自外部站点的伪造操作。

XSS 防护

事项、评论、Wiki、笔记等的富文本会通过 HTML Purifier 处理,仅保留允许的标签后再保存和显示。链接仅允许 http 和 https。AI 生成的文本也全部经过同样的处理后再保存。

SQL 注入防护

数据库操作使用 CakePHP 5 的 ORM 和预处理语句。

Host 标头验证

密码重置、邀请和通知邮件中的链接根据已登记的域名生成,而不是根据请求的 Host 标头。因此无法通过伪造的 Host 标头将邮件中的链接替换为外部地址。

文件存储

事项的图片和项目的文件保存在公开文件夹之外,在确认查看者是否为该项目的成员后再提供。不接受 PHP 等可执行扩展名的文件。

API 密钥加密

AI 功能所用的 Claude API 密钥会加密后保存在数据库中。

Claude 集成的 API 令牌

Claude 集成默认处于关闭状态,只有在管理员开启该功能并为每位用户授权后才能使用。API 令牌仅保存哈希值,并可设置有效期。更改密码后令牌将失效。API 同样执行与界面相同的权限检查,只读令牌无法进行任何更改。

IP 地址限制

管理员可以限定允许访问的 IP 地址。

安装程序关闭

完成设置后,将无法再访问安装程序界面。

非公开文件夹保护

在 Apache 上默认拒绝对配置、日志、源代码等文件夹的直接访问(使用 Nginx 时请参阅推荐设置)。

更新前自动备份

在软件更新之前自动创建备份。

更新文件签名验证

官方更新文件附有开发者的数字签名(Ed25519)。更新前会核对签名以及所有文件的内容,被篡改的文件和非官方的更新文件不会被应用。

图片上传验证

头像、缩略图、徽标等图片会根据文件内容判断格式,并以随机文件名保存。图片存储文件夹不会提供图片以外的文件(Apache 环境)。不接受 SVG。

安全标头

发送 Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 和 Permissions-Policy,防止点击劫持以及信息泄露到外部站点。以 HTTPS 运行时还会发送 Strict-Transport-Security,使浏览器始终通过 HTTPS 连接。

会话管理

每次登录时都会重新创建会话。权限变更、账号删除和密码更改会立即反映到处于登录状态的界面。更改电子邮箱和密码时需要输入当前密码。

每次发布的安全检查

在发布新版本之前,会进行以下检查。检查在与生产环境配置相同的测试环境中进行,不会针对正在运行的服务或客户的服务器实施。最新版本实施的内容记载于“最新版本的检查结果”。

类别检查内容使用的工具与标准频率
依赖库确认所使用的库是否存在已知漏洞,并生成所用库的清单(SBOM)composer audit、OSV-Scanner、CycloneDX每次发布
静态分析从源代码中检测输入值到达危险处理的路径(XSS、SQL 注入等)Psalm(污点分析)、PHPStan(级别 5)、Semgrep每次发布
机密信息混入源代码或发布文件中是否包含密码或 API 密钥gitleaks每次发布
动态扫描分别以管理员和普通用户身份登录,实际发送攻击请求并确认响应Nuclei每次发布
权限检查能否通过改写 URL 中的 ID 查看或操作未参与项目的事项、文件和笔记自动测试(PHPUnit)、手动确认每次发布
文件上传可执行文件、伪装成图片的文件、操纵路径的 ZIP 等是否会被拒绝代码审查、手动确认每次发布
XSS在事项正文、评论、Wiki 和 AI 生成文本中输入攻击字符串,确认脚本不会被执行代码审查、手动确认每次发布
按服务器配置确认针对 Apache、Nginx 以及公开文件夹的各种放置方式,确认能否直接访问配置文件或日志手动确认每次发布
Claude 集成扩展程序扩展程序所用库的已知漏洞、API 令牌的处理方式、通信目标的限制npm audit、gitleaks、代码审查每次发布扩展程序
基于检查清单的自查逐项确认认证、会话、输入验证、错误处理等参考 OWASP ASVS 5.0 级别 1、IPA(日本)《如何确保网站安全》每个主版本
官方网站geckoflag.com 的 HTTPS 设置和安全标头SSL Labs、Mozilla Observatory每月 1 次

如发现严重程度为“高”或“中”的问题,在修复并重新检查之前不会发布。对于“低”级别的问题,会确认其内容,然后进行修复或记录不受影响的理由。

依赖库的更新方针

对于 GeckoFlag 所使用的库(CakePHP 等)的已知漏洞,会在每次发布时进行确认。如发现影响 GeckoFlag 的漏洞,将以下列期限为目标发布修复版本。

  • 严重程度“紧急”“高”:公开后 14 天内
  • 严重程度“中”:公开后 30 天内
  • 严重程度“低”:下一次发布(最迟 90 天内)

即使是在 GeckoFlag 的使用方式下不受影响的漏洞,也会在下一次发布中更新到已修复的版本。开发用的库不包含在发布文件中。

最新版本的检查结果:v1.11.0

v1.11.0 中不存在严重程度为“高”或“中”的未修复问题(检查日期:2026-10-28)。

本次以 v1.10.0 以来的变更(Claude 集成,富文本的文字颜色、背景色和分隔线等)为对象进行检查,并同时修复了此前版本中已存在的问题。如果您正在使用 v1.10.0 或更早的版本,建议更新到 v1.11.0。

PHP / 数据库PHP 8.3、MariaDB 10.11
Web 服务器Apache 2.4、Nginx 1.24(PHP-FPM 8.3)、PHP 内置服务器
实施地点开发者的测试环境
检查使用的工具(版本)检出(高 / 中 / 低)处理
依赖库GitHub Advisory Database、FriendsOfPHP security-advisories(截至 2026-10-28 的数据,89 个包)0 / 0 / 0分发文件所含的库中没有已知漏洞。开发用库的已知漏洞已在 v1.11.0 中通过更新解决(开发用库不包含在分发文件中)
静态分析与代码审查Psalm 5.26.1(taint 分析)、PHPStan 2.1.17(级别 5)、Semgrep 1.182.1、人工代码审查(v1.10.0 以来的变更部分:Claude 集成的 API 与令牌、富文本、保持登录、软件更新;并包括所有界面的链接输出)1 / 1 / 3“高”“中”及 2 项“低”已在 v1.11.0 中修复。剩余 1 项“低”仅会因用户本人的操作而发生,已确认影响有限。“高”1 项是此前版本中已存在的问题
机密信息混入gitleaks 8.24.20 / 0 / 0同时检查了源代码和分发文件。检出的 2 项均为误报(外部库中的示例字符串等)
修复确认在测试环境(PHP 8.3、MariaDB 10.11、Apache 2.4、Nginx 1.24、Chromium)中进行运行确认—针对每项问题,确认修复前的问题不再重现
动态扫描Nuclei v3.11.1(模板 v10.5.1)。分别以未登录、管理员、成员状态实施0 / 0 / 0无问题
权限检查PHPUnit 12.5(454 项自动测试。在原有内容基础上,确认 Claude 集成的 API 会拒绝无令牌、只读令牌、未获许可的用户以及功能关闭时的请求,且不会访问到用户未参与的项目)0 / 0 / 0无问题
按服务器配置确认手动(Apache 2.4、Nginx 1.24,公开文件夹的 2 种放置方式。配置文件、日志、会话、存储文件等 39 个 URL)0 / 0 / 1已在 v1.11.0 中修复:在 Apache 上也完全拒绝对旧版本文件存储文件夹(files)的直接访问。其他无问题
检查清单OWASP ASVS 5.0 级别 1(70 项)适用的 56 项中满足 50 项本次未重新审查(沿用此前 v1.10.0 的结果)
Claude 集成扩展程序npm audit、gitleaks 8.24.2、mcpb validate、人工代码审查(geckoflag-1.0.0.mcpb)0 / 0 / 0分发文件所含的库中没有会造成影响的已知漏洞。已确认 API 令牌的处理方式以及通信目标的限制(仅 HTTPS、不跟随重定向)

包括以往版本在内的所有版本的检查结果,汇总于“以往的检查结果”。

未检查的范围

上述检查存在以下局限。在考虑引入时,也请一并确认这些内容。

  • 未接受第三方检查。目前尚未由外部专家进行源代码审查或渗透测试。
  • 客户的服务器环境不在检查范围内。安全性会因操作系统、Web 服务器、PHP 和数据库的设置及更新状况而有很大差异。
  • 并未在所有主机环境中确认。检查过的配置仅限于“最新版本的检查结果”中所列的配置。
  • 外部服务不在范围内。AI 功能所使用的 Anthropic 公司的 API、Claude 集成所使用的 Claude 桌面应用、邮件发送服务器等的安全性取决于各自的提供方。
  • 关于自动工具未能检出的问题。工具无法检出的问题类型(业务逻辑缺陷等)通过手动检查加以弥补,但无法做到面面俱到。

发现漏洞时的报告

如果您发现疑似 GeckoFlag 漏洞的问题,请不要在公开场合披露,而是直接联系以下窗口。所有报告均由开发者亲自查看。

报告窗口:请通过联系表单,将咨询类型选为“漏洞报告”后与我们联系

希望您报告的内容

  • 相关版本,以及存在问题的界面或功能
  • 重现步骤(尽可能提供)
  • 可能造成的影响
  • 您使用的服务器环境(PHP、Web 服务器等)

请求事项

  • 请在您自己管理的环境中进行验证,不要对他人运营的 GeckoFlag 或 geckoflag.com 进行攻击性操作。

如您希望,我们会在修复版本的安全信息中刊登报告者的姓名以示感谢。

发布文件的 SHA-256

您可以将下载的文件与以下值进行核对,确认其是否与官方文件相同。

文件SHA-256
GeckoFlag - 1.11.0.zip33354ac588c4cb4de2953c3c26a484953c2bb886f38196ba4bcf4fe629648399
geckoflag-1.0.0.mcpb44f2c6dfc9f437856d0680920a327820d757a14116064faa6e46ad8a961d0747

确认方法:Windows 在 PowerShell 中运行 Get-FileHash 文件名 -Algorithm SHA256,macOS 和 Linux 运行 shasum -a 256 文件名。

安全使用的推荐设置

GeckoFlag 的安全性也取决于其所在服务器的设置。我们推荐以下设置。

  1. 上传后立即完成安装:在安装完成之前,任何知道该 URL 的人都可以打开设置界面。放置文件后,请立即完成安装。
  2. 使用 HTTPS 运行:登录信息和项目内容将加密传输。许多共享主机都提供免费的 SSL 证书。另外,一旦通过 HTTPS 打开,浏览器在此后 1 年内都会通过 HTTPS 连接该地址(v1.10.0 及更高版本)。如果您计划停止使用 HTTPS,请注意这一点。
  3. 将公开文件夹(文档根目录)设为 webroot:配置文件和日志将位于无法从 Web 访问的位置。
  4. 使用 Nginx 时添加设置:在 Nginx 上 .htaccess 不起作用。请另行配置,拒绝对非公开文件夹的访问,并确保图片上传目录(webroot/img)中不执行 PHP。配置示例请参阅手册(安装)。
  5. 更新到最新版本:安全修复会包含在最新版本中提供。请从官方网站获取更新文件,并确认其 SHA-256。自 v1.10.0 起,更新前还会自动验证签名。
  6. 使 PHP 和数据库保持在受支持的版本:已结束支持的 PHP 不会再获得修复。
  7. 保护管理员账号:请使用较长且难以猜测的密码,并仅向确有需要的人授予管理员权限。
  8. 内部使用时启用 IP 限制:可在“设置”中限定允许访问的 IP 地址。
  9. 定期备份:请将数据库和上传的文件保存在服务器以外的其他位置。

安全相关咨询