每日HackerNews RSS

ANSI 转义序列注入(AESI)是一种严重的安全性漏洞,影响着通过模型上下文协议(MCP)获取数据的 AI 智能体。 由于 ANSI 代码最初旨在控制终端显示,它们对人类不可见,但对语言模型却完全可读,因此攻击者可以将隐藏指令“潜入”文本中。如果智能体处理这些文本,它可能会在人类监督者察觉不到恶意负载的情况下,执行未经授权的指令、泄露数据或被误导。 此缺陷主要有两种表现形式: * **直接获取型 AESI:** 恶意负载从外部 URL 获取并直接传递给智能体。 * **存储型 AESI:** 负载被保存到系统中并随后被检索,可能影响不同的用户或未来的会话。 由于 AESI 取决于实时服务器处理和中继数据的方式,因此使用动态应用程序安全测试(DAST)检测该漏洞效果最佳。有效的扫描工具必须检查“模型可消费”字段中的原始字节,以识别残留的转义序列。为降低风险,开发者应从所有摄入的文本中清除控制字符,实施严格的输入验证,并将所有外部或存储的数据视为不可信数据,无论其来源如何。

这场 Hacker News 讨论聚焦于在模型上下文协议(MCP)服务器中发现的 **ANSI 转义注入漏洞**。这些漏洞允许攻击者在数据中隐藏恶意指令或载荷,人类用户无法察觉,但 AI 代理会对其进行处理。 争论的核心在于,这究竟是一个“新”问题,还是经典安全缺陷的重现。批评者认为,开发者盲目信任不可信输入,忽视了基础安全原则。然而,另一些人指出一个根本困境:大语言模型(LLM)天生无法区分“控制”与“数据”,因为所有输入都会成为模型上下文的一部分。与传统软件可以通过清洗(如预编译 SQL 语句)来降低风险不同,LLM 对模仿合法指令的复杂社会工程学和注入攻击有着独特的易感性。 虽然有人建议通过人工监督来解决,但另一些人认为,对于自主代理而言,人工验证并不切实际。讨论凸显了 AI 领域中“对抗性输入”带来的严峻挑战,并得出结论:在建立起数据与执行逻辑之间的明确隔离之前,LLM 在利用人类感知与机器处理之间差异的操纵攻击面前,仍将极度脆弱。

**Cruller** 是 Bun 运行时的一个轻量级分支,专为执行预构建的生产级 JavaScript 服务器而优化。通过剔除包管理器、打包器、转译器和测试运行器等侧重于开发的特性,Cruller 仅专注于核心运行时功能,包括 `Bun.serve`、HTTP/1-3、WebSockets 和 `fetch`。 该项目移植到了原生 Zig 0.16,通过自定义的生成代码嵌入模块,简化了构建图并提高了可移植性。与官方 Bun 发行版相比,此重新设计使二进制文件体积缩小了约 18%,同时保持了 JavaScript 执行的性能水平。 作为一款专用运行时而非通用的 Bun 替代品,Cruller 专为那些在其他环节处理打包或转译基础设施的环境而设计。尽管目前尚处于开发阶段且主要支持 Linux x64,但该运行时已成功通过了核心冒烟测试,包括 CJS/ESM 入口点和 HTTP 服务器功能。通过将运行时与 Bun 原本复杂的构建集成剥离,Cruller 为托管静态和服务器端 JavaScript 应用程序提供了一种专注且高效的解决方案。

对不起。

这篇文章详细介绍了如何将 IntelliJ 等资源占用较大的 IDE 替换为高度定制的 Emacs **Eglot** 环境,以用于 Scala 和 Kotlin 等 JVM 语言开发。 虽然 Eglot 的极简设计避免了臃肿,但它缺乏针对特定语言服务器问题的开箱即用修复方案。作者展示了如何利用 Emacs Lisp 的“无限可扩展性”来克服这些限制。关键策略包括: * **基于 Lisp 的变通方法:** 使用 `advice-add` 拦截 JSON-RPC 有效载荷,从而在不等待上游修复的情况下,即时修补漏洞(如 Kotlin 的空补全字符串问题)或修复 JAR 文件的 URI 转换错误。 * **性能优化:** 通过自定义标志微调 JVM 语言服务器(Metals, intellij-server),并禁用语义标记刷新(semantic token refreshing)等激进功能,以防止 UI 闪烁。 * **统一工作流:** 利用 `use-package` 实现一致的按键绑定和钩子,同时使用 Nix flakes 和 `direnv` 确保开发环境的可复现性与隔离性。 通过将 IDE 视为一组模块化工具的集合而非庞大的整体,作者实现了一种既快速、高度个性化,又稳定且可扩展的编码体验。Emacs 使开发者能够弥合协议优先的简洁性与现代 JVM 开发复杂需求之间的鸿沟。

这份 Hacker News 讨论聚焦于“全能型” JetBrains IDE(如 IntelliJ 等)与轻量级、高度可定制编辑器(如 Emacs 或 Neovim)之间的争论。 **对 IntelliJ 的批评:** 批评者认为 JetBrains IDE 变得臃肿、资源占用高且过于复杂。一些用户反馈出现了性能下降、索引缓慢的问题,并对近期加入的 AI 功能感到不满。此外,人们还对该公司的背景及其部分功能的闭源性质表示担忧,一些开发者更倾向于使用能够深入了解工具链的开源替代方案。 **对 IntelliJ 的辩护:** 支持者认为 JetBrains 仍然是 JVM 语言的行业标准,它提供了其他编辑器难以复制的卓越的开箱即用重构、代码导航和调试功能。许多人强调,这是一款值得订阅费用的专业级工具,并指出所谓的“臃肿”往往源于复杂的项目需求,而非软件本身。 **“Emacs/Neovim” 替代方案:** 转向 Emacs 的用户表示,他们渴望的是一个“真正可定制”的环境。尽管承认其学习曲线陡峭且配置现代 LSP 支持需要耗费精力,但他们认为从长远来看,这种方式效率更高。

编写自定义内存分配器远不止返回请求的字节数那么简单。为了手动管理内存,分配器必须处理元数据、内存对齐和碎片化问题,而每一个环节都会引发一系列技术挑战。 基础的“指针碰撞分配器”(bump allocator)虽然速度快,但无法释放单个对象。为了实现 `free()` 功能,分配器需要一个“头部”(Header)来存储元数据。然而,严格的内存“对齐”要求意味着数据并不总能紧接在头部之后,因此需要“填充”(padding)。由于填充的大小不固定,直接通过固定距离的指针回溯到头部的方法会失效,必须使用“后向指针”来可靠地定位元数据。 为了管理已释放的内存,需要一个“空闲链表”(Free List)来追踪可用内存块。两项关键优化必不可少:通过“分割”大块来防止浪费,以及通过“合并”相邻的空闲块来防止碎片化。维护这些机制需要额外的元数据(如尾部记录),以便分配器能够在内存中“向后遍历”。 归根结底,构建分配器是一场权衡的博弈:每一次优化空间或功能的尝试,都不可避免地需要更多的簿记工作。这一过程凸显了一个事实:即使是最简单的 C 语言函数,其底层也依赖于复杂且精心编排的系统。

抱歉。

✦ 识别敏感信息 无论是检测到的数字模式、文件名本身,还是通过端侧 AI 读取内容,Guardian 都能找出那些不应随意存放的文件。 我们承诺:Guardian 能够标记出可能包含敏感信息的文件,而非“确保找出所有敏感文件”。这是一个强有力的初步筛选,而非绝对保证。

抱歉。

Commodore Amiga 1000 于 1985 年 7 月 23 日发布,是一项技术奇迹,其领先时代之处可谓领先了十年。当时,尽管苹果 Macintosh 等竞争对手只提供基础的图形界面,但 Amiga 却配备了先进的定制硬件、绚丽的彩色图形、高品质立体声,以及最核心的真抢占式多任务处理功能。这使得用户可以流畅地同时运行多个应用程序——例如在玩游戏或进行文字处理的同时下载文件——而主流个人电脑直到 1990 年代中期才完全实现这种水平。 尽管性能具有革命性,但 Amiga 未能在大众市场占据主导地位。Commodore 公司因领导层不力及营销策略无效,未能充分利用该平台极具远见的设计。虽然忠实的拥趸们感觉仿佛生活在未来,但该平台缺乏生存所需的商业基础设施。到 1994 年 Commodore 破产时,Amiga 用户感到被抛弃,被迫转向功能较弱的系统,而这些系统花费了多年时间才达到 Amiga 自 1985 年起就已具备的功能水平。归根结底,Amiga 成为了计算史上一个悲剧性的“如果”——一台卓越的机器,却因其所属公司无法将其天才的设计推向市场而走向衰落。

抱歉。

对于已经熟练掌握基本操作的用户来说,Vim 是一款功能强大的 ASCII 艺术创作工具。虽然普通文本编辑器在处理空白区域时往往力不从心,但 Vim 提供的几项内置功能可以简化绘图流程: * **虚拟编辑:** 使用 `:set virtualedit=all`,让光标可以自由移动到行尾之后的空白区域。 * **可视化块模式:** 使用 `Ctrl+v` 选中、插入、替换或删除绘图中的矩形区域,从而轻松移动或清理特定部分。 * **复制/粘贴:** 使用 `1vP` 命令,可以用矩形选区覆盖现有文本,而不是挤开原有内容。 * **宏:** 使用 `q` 记录复杂且重复的序列,实现重复图案放置的自动化。 * **实用设置:** 启用 `:set mouse=a` 以支持鼠标快速导航,启用 `:set list` 以可视化显示空格。 归根结底,这些工具只是便利手段而非必需品。正如艺术家 Joan G. Stark 所言,优秀的 ASCII 艺术只需等宽字体和你的创意即可。你可以利用这些技巧提升工作效率,但请记住,艺术本身源于你。

抱歉。

本文重点介绍了在通过子进程调用 `git` 的工具中存在的**参数注入**(CWE-88)风险。由于 Git 会将某些参数视为配置标志(例如 `--upload-pack`),攻击者即使在程序不使用 shell 的情况下,也能够通过提供以连字符开头的恶意字符串来重写 Git 的行为。 尽管 Git 引入了 `--end-of-options` 标志来安全地终止选项解析,但该标志经常被错误使用或忽视。标准的 `--` 分隔符通常是不够的,因为它们在 Git 复杂的命令行语法中承担着不同的角色。 许多包管理器(如 Bundler、Composer、pip)历史上都曾存在此类漏洞,且往往是在漏洞被利用后才发现问题。由于需要支持旧版 Linux 发行版中提供的老旧 Git 版本,修复工作变得十分复杂;使用 `--end-of-options` 需要较新的 Git 版本(2.24.0 或更高版本,某些子命令甚至需要更新的版本)。虽然一些开发者使用纯 Git 库(如 `libgit2`)来彻底避开参数解析问题,但这些库也带来了额外的维护负担。作者最后呼吁在生态系统中更一致地使用 `--end-of-options`,并提高对 Git 最低版本的版本要求。

抱歉。

arXivLabs 是一个让合作者能直接在我们的网站上开发并分享新功能的框架。与 arXivLabs 合作的个人和组织都认同并接受我们对于开放、社区、卓越和用户数据隐私的价值观。arXiv 致力于秉持这些价值观,并仅与遵守这些价值观的合作伙伴开展工作。您是否有能够为 arXiv 社区增值的项目构想?了解更多关于 arXivLabs 的信息。

对不起。

**ascdraw** 是一款高性能、以键盘操作为优先的绘图工具,专为基于文本的工作流而设计。它提供了一个无限大的 Unicode 画布,用于绘制线条、形状、符号和文本,并支持图层、颜色以及导出为 TXT、JSON 和 PNG 格式。该工具基于 Rust 构建,运行速度超过 120 FPS,非常适合追求效率和程序化集成的用户。 主要功能包括: * **直观的编辑方式:** 采用模态界面,支持图章、路径连线和矩形操作。 * **工作流集成:** 可作为独立编辑器使用,也可作为 Neovim、Kakoune 和 Emacs 等文本编辑器的过滤器。 * **高度可定制:** 通过 `toml` 文件进行配置,支持自定义主题、字体和快捷键。 ascdraw 采用 GPLv3 许可证,可免费使用,同时也欢迎通过 9.99 美元的个人许可进行自愿捐赠。虽然软件功能完善,但目前仍处于积极开发阶段,界面也在不断演进。用户可以通过 Rust 工具链从源码构建,或直接从 GitHub 下载。对于不适用 GPL 条款的商业用途,可根据需求提供定制许可。

抱歉。

更多

联系我们 contact @ memedata.com