
claude-obsidian恶意文件闯进 Obsidian 知识库会撞上哪些检查——归档入口四道关口完整拆解【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidianclaude-obsidian 是一个把任意资料变成本地知识库的工具丢给它文件或链接它会归档进你的 Obsidian 知识库并整理链接逐渐长成一张互连的 Markdown 知识图谱。但这个归档入口也是外部输入直接接触你文件系统的唯一位置全部安全设计都集中在这里。下面跟着一个可疑文件走完它的旅程看它一路上会过哪些关口。威胁面速写攻击者对一份文件能做什么先站到攻击者一边想五件事路径把戏用../或符号链接逃离知识库目录够到库外的文件同名混淆在不区分大小写的系统上拿Note.md与NOTE.MD钻检查的空子资源耗尽一批塞进海量文件或几个 GB 的大块头吃满磁盘并发捣乱多个进程同时操作同一个库写坏的覆盖别人的借道 URL把归档链接指向内网地址让工具替自己探内网。后面的关口就是逐条掐断这五条路。第一道关口纸面审查——磁盘还没被碰到这一关的所有判断都不接触磁盘文件在内存里只是一段字符串读完字符串就能定生死。路径词法绝对路径、反斜杠、./..段、a/../b这类未规范化写法一律拒收文件名要求 NFC 形态Unicode 的统一编码形式长度不超 240 字节。配置侧见_validate_relative_directory事务层的_normalize_vault_path更严。文件名卫生_validate_filename拦下控制字符、零宽字符、首尾带空格的怪名字以及CON、NUL这类 Windows 保留名。预算硬限CaptureBudget是批次的入场券——单批最多 100 个文件单文件 64 MB、整批 256 MB队列文档 8 MB、4096 条封顶。越线即失败FILE_BUDGET_EXCEEDED、TOTAL_BUDGET_EXCEEDED这类错误码确定性地报出来没有再试一次也许行。为什么放在最前因为零成本。就像查快递先看面单最离谱的包裹根本不用开箱就能识别IO 的开销和副作用都省了。第二道关口走上真实文件系统——路径为什么要查两遍词法干净就真的安全吗未必。一个叫wiki的目录实体可能是一条指向系统别处的符号链接一种快捷方式指向另一个真实位置。于是系统在真实文件系统上再查一遍符号链接四处拦截收件箱根目录报SOURCE_ROOT_SYMLINKinbox 内目录条目报SOURCE_SYMLINK.raw存储报RAW_STORE_SYMLINK事务写入路径的每一段报SYMLINK_WRITE_PATH。中间目录逐段走查_allowed_source_path不只看终点只要源文件途经某段被换成别名目录进入收件箱同样以SOURCE_OUTSIDE_INBOX拦下。包含性复核assert_within把符号链接全部解析后确认落点仍在库内否则PATH_OUTSIDE_VAULT。同名陷阱_assert_no_existing_portable_alias写入前枚举目录里的兄弟项只要 NFC casefold忽略大小写的归一化后撞名就抛CASEFOLD_PATH_ALIAS。串成一个攻击看攻击者在 inbox 里放一条指向~/.ssh的链接工具刚想顺着走逐段检查先报警包含性检查再兜一刀链路两步之内就断了。第三道关口进不可变仓库——指纹当文件名的账本文件过了前两关核心动作才开始内容寻址复制。说白了就是拿文件内容的指纹当文件名把源文件以SHA-256.扩展名的形式复制进.raw/captured/。身份指纹source_identity算 SHA-256 时同时比对读取前后的 inode、大小和修改时间。文件若在这几秒间被调包SOURCE_CHANGED立刻抛出——落库的是校验那一刻真实存在的字节。重复归档再对账_find_existing_capture碰到同指纹的旧副本会重新逐字节校验。旧副本和自己名字里的指纹对不上说明仓库被人从外部动过IMMUTABLE_SOURCE_CONFLICT一报整个操作失败。原始资料区因此变成一本只能往后记、不许涂改的账旧记录必须和指纹严丝合缝多一分少一分都过不了。第四道关口多进程同场——谁的写不能压过谁的两个进程同时操作同一个库谁说了算claude-obsidian 的答案是锁、令牌加可恢复的事务。队列锁CaptureQueueLock靠原子创建锁目录实现创建失败说明已有持有者持有者在 owner.json 里写下pid、主机名和随机 token释放前回读核对 token防止锁被人中途顶替被顶替则报QUEUE_LOCK_OWNERSHIP_LOST。死锁恢复很克制确认持有进程已不存在、锁又明显超龄才敢回收动手前再核对一次锁的身份没变。事务兜底claude_obsidian/transaction.py 里每次写入先记预期哈希日志持久化落盘走原子替换回滚前再核对目标文件的指纹期间被换过就报ROLLBACK_TARGET_CHANGED中断也能安全续做。每次冲突都有姓名全部收敛进CaptureConflict错误家族报错响亮明确不玩静默失败。加餐归档源是 URL 时边界画在哪攻击面换成网络防线跟着换位置validate_https_url只认 HTTPS其余协议直接拒私有与本地主机一律URL_PRIVATE_HOSTlocalhost、169.254.*网段、.internal后缀乃至各种数字编码 IP 的花式写法重定向一旦跳出白名单域名即中断外部动作只允许生成惰性计划用户明确点头之前一个字节都不会发出去。上手体验克隆一个库跑通完整旅程体验路径很短克隆仓库后运行初始化脚本一个独立知识库即生成。安装细节见 docs/install-guide.md归档事务的规则另在 skills/wiki/references/operation-transactions.md 有说明。仓库地址https://gitcode.com/GitHub_Trending/cl/claude-obsidian跑起来之后归档进来的资料最终会组织成可以反复查询的图谱与画布收尾威胁、拦截手段与错误码速查威胁拦截手段错误码路径穿越词法校验 包含性复核PATH_OUTSIDE_VAULT符号链接逃逸四处逐段拒绝SOURCE_SYMLINK、SYMLINK_WRITE_PATH同名文件混淆casefold 别名枚举CASEFOLD_PATH_ALIAS资源耗尽批次预算硬限FILE_BUDGET_EXCEEDED源文件归档中被调包前后元数据对账SOURCE_CHANGED仓库副本被改写内容寻址逐字节再校验IMMUTABLE_SOURCE_CONFLICT并发抢锁owner token 回读QUEUE_LOCK_OWNERSHIP_LOST回滚期间目标被换预检哈希 指纹复核ROLLBACK_TARGET_CHANGEDURL 探测内网HTTPS 白名单 私有主机拒绝URL_PRIVATE_HOST安全策略本身则声明在 SECURITY.md。从文件名读入到锁释放每一步都留下可对账的痕迹——一个把文件归你所有当原则的项目用这种方式守住外部内容越界的瞬间。【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidian创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考