NoSignups (FckSignups)
安全运营 NoSignups 分支:明确数据、外链与提交边界
检查外部工具链接、目录运行时验证和会写入 GitHub 的 Worker,不把 CORS 或免注册定位当成授权控制。
你将学会
- 新窗口链接属性不验证目标网站。
- 提交端点需要浏览器 CORS 之外的控制。
- URL 可解析和对象有类型都不等于完整验证。
开始前需要
- 基础 JavaScript 和 JSON 知识
- 一个无敏感任务样本与目录测试记录
解释本章边界,并用建议样例或审查记录进行核验。
先看结论
- 新窗口链接属性不验证目标网站。
- 提交端点需要浏览器 CORS 之外的控制。
- URL 可解析和对象有类型都不等于完整验证。
目录记录跨越了信任边界
ToolCard 打开 tool.url,并提供 tool.github 链接,新标签页使用 noopener 和 noreferrer。这些属性限制部分窗口引用与来源传递行为,却不认证目标网站,也不会让目标内容自动安全。目录记录被修改或域名发生变化,仍可能把读者带到意料之外的位置;显示名称不能代替目标检查。
加固分支应在渲染远程记录前,验证受支持的 HTTP 或 HTTPS 地址、字段类型、唯一 ID 和分类引用。这是建议增加的控制,不是 loadTools 已证明具备的功能。验证时使用无敏感样例,不能为了确认免注册宣传,就把个人文件上传到陌生外链工具。
提交表单可能创建外部状态
已检查的 Worker 把 POST 请求分配给提交、举报或建议处理器。handleSubmitTool 验证字段,构建 GitHub issue 内容,再用服务端令牌调用 issues API。看似只读的目录可能因此拥有独立写入路径。启用分支表单前要检查发送目标,并只在自己控制的服务和仓库测试。
corsHeaders 为响应选择浏览器允许的来源,而已展示路由代码本身并未先拒绝不在列表中的 Origin,再交给处理器。CORS 响应头不能代替服务端授权和防滥用控制。这是针对所列文件的源码观察,不是渗透测试,也不表示线上部署没有其他平台级防护。
内容验证与凭据权限分别约束
提交验证器检查 URL 字符串能否解析,但可解析不等于协议或域名获准。名称和描述分别截断到 100 和 500 字符,category 在该处理器中是字符串,没有核对目录分类成员资格。这些细节说明代码实际执行了什么,也指出把提交当作精选记录前还需要哪些审查。
将 issue 写入凭据只保存在 Worker 秘密环境中,限制到必要仓库操作,并规划轮换与异常监控。人工或智能体审核时,都应把提交描述当作不可信数据。下方练习是防御性清单,不是请求公共端点的命令;本次审查没有发送提交,也没有创建 issue。
实施步骤
- 1
列出分支的目录来源和表单端点。
- 2
在渲染或接收前验证记录。
- 3
确保写入凭据不进入前端包。
- 4
只在自有服务和仓库用无敏感样例测试。
可复制示例
读取边界:目录来源 -> 经过验证的记录 -> 外部链接
写入边界:经过审查的表单 -> 受控 Worker -> 自有 issue 仓库
秘密边界:仅 Worker 环境,不能进入浏览器代码
测试边界:无敏感样例,不向公共端点提交常见问题
来源允许列表能认证发送者吗?
不能。浏览器 CORS 与服务端授权解决的问题不同,应检查实际请求控制及部署层防护。
测试过公共提交端点吗?
没有。结论来自已阅读源码,没有提交公共表单或创建 issue。
资料来源
- README.md来源核查 2026-09-07
- package.json来源核查 2026-09-07
- vite.config.mts来源核查 2026-09-07
- src/hooks/useTools.ts来源核查 2026-09-07
- src/components/Home/Tools/Tools.tsx来源核查 2026-09-07
- src/components/Home/Tools/ToolCard/ToolCard.tsx来源核查 2026-09-07
- src/types/index.ts来源核查 2026-09-07
- src/constants/fallbackData.ts来源核查 2026-09-07
- src/data/schema.js来源核查 2026-09-07
- cloudflare-worker/worker.ts来源核查 2026-09-07
- cloudflare-worker/urlHandlers/handleSubmitTool.ts来源核查 2026-09-07
- cloudflare-worker/utils.ts来源核查 2026-09-07