news 2026/8/31 7:41:55

agentmemory远程部署安全加固指南:HMAC密钥、Bearer令牌与HTTPS强制三件套

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
agentmemory远程部署安全加固指南:HMAC密钥、Bearer令牌与HTTPS强制三件套

agentmemory远程部署安全加固指南:HMAC密钥、Bearer令牌与HTTPS强制三件套

【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory

agentmemory是专为 AI 编程代理打造的持久记忆服务(基于真实世界基准测试排名第一),能让 Claude Code、Cursor、Devin 等代理跨会话记住你的项目上下文。默认情况下它绑定本机回环地址、不设密码——但一旦把 agentmemory 部署到远程服务器供多人或云端代理访问,就必须在三步内完成安全加固:配置AGENTMEMORY_SECRET启用 Bearer 令牌认证、理解内置的 HMAC 恒定时间比较机制、用AGENTMEMORY_REQUIRE_HTTPS强制 HTTPS。本文带你用不到 10 分钟把远程部署的 agentmemory 变成"带门禁"的服务。

为什么本地默认"不设防",远程必须加固

agentmemory 的 REST API 默认绑定127.0.0.1,本机访问无需任何凭证,这是刻意的轻量设计。但远程部署后有两个真实风险:

  • 未认证访问:任何能到达 3111 端口的人都能读写你的全部记忆数据;
  • 凭据被窃听:Bearer 令牌和记忆内容在明文 HTTP 传输中可被网络中间人抓包。

好消息是:三条防线全部内置在 agentmemory 中,你只需要设置环境变量,无需改一行源码。

第一步:配置 AGENTMEMORY_SECRET,一键启用 Bearer 令牌认证

在服务端启动前设置环境变量即可:

export AGENTMEMORY_SECRET="一串足够长的随机字符串"

服务启动时会在 src/index.ts 读取该密钥。一旦设置:

  • 所有受保护的 REST 端点(记忆读写、搜索、治理、导出等)都要求请求头携带Authorization: Bearer <secret>,否则返回 401;
  • 所有官方 hook 脚本(会话开始、工具调用前后、停止钩子等)会自动读取同一个变量并附带令牌,例如 src/hooks/post-tool-use.ts,无需逐条配置
  • 独立 MCP 服务@agentmemory/mcp会自动把令牌附加到对远端的每一次 REST 调用上(见 src/mcp/rest-proxy.ts)。

MCP 端点的鉴权逻辑非常直观,见 src/mcp/server.ts:

if (!sec) return null; // 未设置密钥则不鉴权(仅适合本机) const auth = req.headers?.["authorization"] ?? req.headers?.["Authorization"]; if (typeof auth !== "string" || !timingSafeCompare(auth, `Bearer ${sec}`)) { return { status_code: 401, body: { error: "unauthorized" } }; }

多实例同步(Mesh)同样受保护:早期的 mesh push/pull 端点曾允许无认证请求(项目标记为 HIGH 级修复,见 CHANGELOG.md),现在 mesh 同步在两端都强制要求AGENTMEMORY_SECRET,见 src/functions/mesh.ts。

第二步:看懂内置 HMAC 比较——为什么它防得住时序攻击

很多项目直接写received === secret,攻击者可通过观察响应耗时逐字符猜出密钥。agentmemory 在 src/auth.ts 中用了更稳妥的组合拳:

  1. 随机 32 字节 HMAC 密钥randomBytes(32))在进程启动时生成;
  2. 待比较的两个字符串分别经HMAC-SHA256摘要,输出长度恒定为 32 字节——比较时间不再泄露原始字符串长度信息;
  3. 用 Node 内置的timingSafeEqual做恒定时间字节比较,杜绝逐字符计时侧信道。
const hmacA = createHmac("sha256", hmacKey).update(a).digest(); const hmacB = createHmac("sha256", hmacKey).update(b).digest(); return timingSafeEqual(hmacA, hmacB);

你不需要做任何事,这套机制已内置于所有 Bearer 校验路径,属于"免费获得的加固"。

第三步:AGENTMEMORY_REQUIRE_HTTPS 强制 HTTPS,拒绝明文发送令牌

即使令牌校验很严密,如果走明文 HTTP 传输,令牌照样能被抓包。agentmemory 的官方集成(Hermes、OpenClaw、pi 等)内置了明文 Bearer 守卫

  • 目标地址是https://,或指向本机回环(localhost/127.0.0.1/::1)——放行
  • 目标是明文 HTTP 的远程地址——默认先打印警告"Bearer tokens and memory payloads can be observed on the network; use HTTPS or an SSH tunnel",见 integrations/openclaw/plugin.mjs;
  • 再设置AGENTMEMORY_REQUIRE_HTTPS=1,同一场景将直接抛错拒绝启动,从机制上杜绝明文传输。
export AGENTMEMORY_REQUIRE_HTTPS=1

Hermes 集成中同样的守卫位于 integrations/hermes/init.py。配套的回归测试 test/integration-plaintext-http.test.ts 覆盖了 localhost 放行、LAN IP 警告、https放行等全部分支。

部署建议:在 Cloudflare、Nginx 或平台托管层(项目提供了 deploy/ 下 Coolify、Fly.io、Railway、Render 的官方 Dockerfile 与一键模板)终止 TLS,把 3111 端口藏在反向代理之后,只对外暴露 443。

锦上添花:两条内置的额外防线

🔒Viewer 只绑定本机 + 每响应 CSP 随机 nonce:可视化面板服务默认监听127.0.0.1,且每个响应的 Content-Security-Policy 都使用一次性脚本 nonce 并禁用内联事件属性(script-src-attr 'none'),构造见 src/auth.ts。通过 REST 访问的/agentmemory/viewer同样遵循 Bearer 令牌规则。

🛡️自动打码入库的密钥:记忆写入前会经过隐私函数,自动把Bearer xxx、各类 API key、GitHub token、JWT 等模式替换为[REDACTED_SECRET],见 src/functions/privacy.ts——即使对话内容误粘了令牌,也不会存入长期记忆。

远程部署安全核对清单

检查项做法状态
设置AGENTMEMORY_SECRET长随机字符串,所有客户端统一✅ 必填
启用AGENTMEMORY_REQUIRE_HTTPS=1拒绝明文 HTTP 远程传输✅ 推荐
反代 + 443 终结 TLS参考 deploy/ 模板✅ 推荐
令牌恒定时间校验内置于 src/auth.ts自动生效
Viewer 绑定与 CSP默认127.0.0.1+ nonce自动生效
记忆内容密钥打码内置于 src/functions/privacy.ts自动生效
漏洞报告渠道走私有安全通道,见 SECURITY.md了解

一句话总结:设好AGENTMEMORY_SECRET、打开AGENTMEMORY_REQUIRE_HTTPS=1、把服务藏进 HTTPS 反代——三步之后,你的远程 agentmemory 就同时拥有了 Bearer 令牌门禁、HMAC 恒定时间校验与传输层加密三重防护,可以放心让云端代理长期连接。

【免费下载链接】agentmemory#1 Persistent memory for AI coding agents based on real-world benchmarks项目地址: https://gitcode.com/GitHub_Trending/age/agentmemory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 7:40:57

不确定性引导的潜在扩散模型:实现忠实图像超分辨率

图像超分辨率&#xff08;Super Resolution&#xff0c;SR&#xff09;的目标是根据低分辨率图像重建高分辨率图像。过去几年&#xff0c;基于潜在扩散模型&#xff08;Latent Diffusion Models, LDM&#xff09;的超分方案受到大量关注&#xff1a;它能在保持整体结构的同时生…

作者头像 李华
网站建设 2026/8/31 7:40:01

AI Agent概念验证实战:从Demo到工程落地的关键路径

AI创业正在经历一个明显的转折&#xff1a;从拼想法、拼PPT&#xff0c;转向拼验证、拼工程效率。很多技术团队的真实状态是&#xff0c;Demo已经跑通了&#xff0c;模型也接上了&#xff0c;界面也做完了&#xff0c;但卡在“概念验证”这一道坎上。原因并不复杂&#xff0c;概…

作者头像 李华
网站建设 2026/8/31 7:39:16

Python爬虫实战:从抓包到反爬的完整数据采集方案

这次直接上一套能落地的 Python 网络爬虫完整方案&#xff1a;抓包、构造请求、解析数据、应对反爬、接代理、防封防限流&#xff0c;最后再串成一个带批量导出能力的实战项目。很多人学爬虫失败不是因为某个环节学不会&#xff0c;而是每块知识都是割裂的&#xff1a;只讲 req…

作者头像 李华
网站建设 2026/8/31 7:38:14

HyperMesh新手的三大卡点:网格质量、材料单位与节点显示

线上 HyperMesh 基础培训里&#xff0c;几乎每次都能遇到一个同样的问题&#xff1a;讲师在前面把三维网格切出来&#xff0c;正准备讲质量检查&#xff0c;就有人问——“老师&#xff0c;为什么我的节点都不显示&#xff1f;” 讲师熟练地打开显示设置&#xff0c;节点小球出…

作者头像 李华
网站建设 2026/8/31 7:38:09

手写MiniPin:从自引用到async彻底理解Rust Pin

很多 Rust 开发者第一次被Pin卡住&#xff0c;不是在看文档的时候&#xff0c;而是在写异步代码的时候。一个看起来完全合理的async fn&#xff0c;编译时突然抛出一大屏错误&#xff0c;里面反复出现future is not Send、cannot be sent between threads safely。网上一搜&…

作者头像 李华