Files
hoelee-blog/src/content/posts/zh/giving-ai-your-mouse-and-keyboard-safely.md
T
hoelee 68771101ea edit(content): review batch-1 editorial pass across 24 posts (EN + ZH)
- voice: first-person throughout (we/our -> I/my), matching the post guideline
- privacy: internal LAN IPs replaced with placeholder hostnames
  (n8n.internal, gpu-node.internal); one compose volume path generalised
- ZH twins: Traditional -> Simplified characters (site serves zh-Hans),
  whole-file renormalisation where the twin was still Traditional
- dynamicCta: true on 12 posts so the contextual dual-track CTA renders
- long configs wrapped in <details class="tech-deep-dive"> with a summary
  naming the artefact and line count
- self-hosted-tts: token refresh now writes .tmp + atomic mv, with a note on
  the 401 race the old truncating redirect created
2026-10-27 03:29:03 +08:00

5.7 KiB
Raw Blame History

title, description, pubDate, updatedDate, category, tags, ogImage, banner, draft, dynamicCta
title description pubDate updatedDate category tags ogImage banner draft dynamicCta
把鼠标和键盘交给 AI 之前:Windows 桌面 MCP 的安全边界与实战防线 为什么开箱即用桌面自动化 MCP 存在系统风险?详解如何防范注册表误写、高分屏 Token 溢出与复杂窗口遍历卡死等关键隐患。 2025-10-22 2026-10-25 ai
windows
mcp
security
ai-agents
automation
/og/zh-giving-ai-your-mouse-and-keyboard-safely.jpg /banners/giving-ai-your-mouse-and-keyboard-safely.jpg false true

让 AI 模型直接操控操作系统的物理鼠标和键盘,在演示视频里看起来非常惊艳:Agent 看着你的屏幕、点击按钮、输入文本,自动搞定那些没有提供 REST API 也没有 CLI 命令行接口的老旧桌面软件。

但在生产环境中直接开箱即用,它是一个巨大的运维安全隐患。

在评估 windows-mcp(一个用于让大语言模型连接 Windows UI 自动化操作的 MCP 服务)时,我审查了它的默认工具清单与执行策略。结果发现:它默认把多项宿主机最高权限的功能直接暴露给了模型,中间没有任何隔离。

在把桌面控制权真正交给自治 Agent 之前,必须在传输层设下这四道安全防线。


1. 立即剥离 PowerShell 与注册表工具

当一个 MCP 服务宣称用于“UI 自动化”时,我们预期它提供的是鼠标位移、键盘快捷键、窗口聚焦和截图识别功能。

但 windows-mcp 默认暴露出 21 个工具。在 Click、Type 和 Screenshot 旁边,赫然躺着两个宿主级执行工具:

  • PowerShell:直接在宿主机执行任意 PowerShell 脚本。
  • Registry:直接读取、写入、新建和删除 Windows 注册表键值。

如果 Agent 在尝试“排查某个无法启动的本地软件”时,从过时的网络论坛幻觉出一段注册表修改指令,可能会直接破坏 HKLM\SOFTWARE 下的关键系统项。更严重的是,一旦它读取的文件或网页中存在 Prompt 注入攻击,恶意指令就能通过未隔离的 PowerShell 在你的宿主机上静默执行。

修复方案

绝不能仅仅依靠提示词告诉模型“请不要动注册表”。必须在启动层直接通过 --exclude-tools 阻断注册:

uvx windows-mcp serve --exclude-tools "PowerShell,Registry"

这会将对外暴露的工具集严格缩减至 19 个纯 UI 与进程管理工具。MCP 服务不暴露的接口,模型在协议层就无法调用。


2. 在高分屏与多屏环境下开启强制缩放

现代开发机环境普遍配备 2K(2560×1440)、4K 或多显示器拼接虚拟桌面。

在我平时使用的主力工作站上(1080p 副屏搭配 1440p 主屏,上下拼接构成了总计 2560×2520 的虚拟画布),未缩放的单张 PNG 截图体积高达 2.8 MB。这会直接导致两类致命问题:

  1. MCP 载荷上限截断:多数 MCP 客户端(如 Claude Desktop 或终端 Agent)对单次工具返回结果有 1 MB 的尺寸限制,全量原始截图会直接触发 PayloadTooLarge 报错中断。
  2. 上下文 Token 快速耗尽:超大分辨率图片会吃光上下文窗口的 Token 预算,造成推理成本飙升并把先前的会话记忆过早挤出缓存。

修复方案

通过环境变量强制设置截图缩放比例:

export WINDOWS_MCP_SCREENSHOT_SCALE="0.5"

0.5 的缩放将横纵像素各减半,在不影响元素识别的前提下将体积削减 75%(从 2.8 MB 暴降至约 620 KB)。

坐标换算说明: 启用缩放后,工具元数据会提示 Screenshot Coordinate Scale: 2.0。模型在读取缩放图像的像素坐标后,传给 Click 或 Move 时需要乘以 2.0 换算回实际物理屏幕像素。


3. 将复杂 Electron 进程加入遍历黑名单(Issue #383)

windows-mcp 提供了两种屏幕感知模式:

  • Screenshot:快速纯视觉截图,不提取底层 UI 元素树。
  • Snapshot:深度 UI 树遍历,提取所有控件的包围盒、元素类型与 ID。

如果屏幕上开着 VS Code(Code.exe)或 Cursor(Cursor.exe)等具备庞大 DOM 树的应用,调用 Snapshot 时 Windows UIAutomation 树遍历极易发生性能阻塞,导致 Agent 在长达 30 至 60 秒内完全假死。

修复方案

利用进程排除名单,直接跳过重型编辑器窗口的树遍历:

export WINDOWS_MCP_EXCLUDE_PROCESSES="Code.exe,Cursor.exe"

自动化引擎将忽略开发工具的内部结构,只专注于我们要操控的业务窗口。


4. 彻底关闭截图屏幕闪烁与遥测上传

默认配置下,每次截图后 windows-mcp 会在屏幕四周渲染一圈橙红色的发光矩形边框。在连续执行的多步自动化流程中,频繁的强光闪烁会对正在同台电脑前工作的用户造成严重视觉干扰。

此外,服务默认会向 PostHog 发送匿名使用遥测。

修复方案

通过环境变量彻底关闭闪光与遥测:

export WINDOWS_MCP_DISABLE_FLASH="1"
export ANONYMIZED_TELEMETRY="false"

生产级完整配置模版

结合上述四道防线的标准 stdio 配置如下:

{
  "command": "uvx",
  "args": [
    "windows-mcp",
    "serve",
    "--exclude-tools",
    "PowerShell,Registry"
  ],
  "env": {
    "WINDOWS_MCP_CONTROL": "false",
    "WINDOWS_MCP_SCREENSHOT_SCALE": "0.5",
    "WINDOWS_MCP_DISABLE_FLASH": "1",
    "WINDOWS_MCP_EXCLUDE_PROCESSES": "Code.exe,Cursor.exe",
    "ANONYMIZED_TELEMETRY": "false"
  }
}

让 AI 拥有操控桌面的能力确实能够补全很多遗留系统的自动化断点,但前提是必须拥有严密的防守边界。把控制权建立在协议防线之上,永远比寄希望于大模型自觉遵守提示词更可靠。