iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
生成式 AI

被AI之箭射中了 - 是覺醒還是死去系列 第 8

Day08 - MCP:踩坑 MCP Proxy Server 的安全機制實作

  • 分享至 

  • xImage
  •  

(9/23 更新:調整安全機制流程理解,並同步更新更新圖片)

前言

今天的心情,覺得自己踩了一個不該踩的坑

安全機制描述

在 D6 的文章,我們已經知道可以透過在 MCP 工具描述塞入惡意指令 讓 LLM 執行危險的行為,那除了引入 MCP 工具前的初步安全篩選外,還可以建立更多的層次的安全機制。

下圖是模擬呼叫 MCP 工具的兩種流程,主要差異在於 MCP工具描述詞是否需要經過檢查

  • 紅線流程:不需檢查直接使用
  • 綠線流程:每次呼叫工具方法時,都需要先檢查

https://ithelp.ithome.com.tw/upload/images/20250923/20141272id1J2wolxf.png

若是採取綠線的流程,即便 MCP Server 某天不幸被駭客短暫攻入,並添加了惡意描述,也能透過中介層的檢查機制阻止它,進一步避免 LLM 執行惡意內容。

條列實作檢查機制步驟

  • 寫一個本地 MCP Proxy Server
  • 讓 agent 實際連線該 Server
  • 呼叫工具並且會執行上述檢查

實作一個本地 MCP Proxy Server

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import { spawn, ChildProcess } from "node:child_process";



const server = new McpServer({ name: "mcp-proxy-protect", version: "1.0.0" });

//定義 MCP Server 工具範例方法
server.registerTool("add",

{

title: "數字加總",
description: "把 a 與 b 相加後回傳結果(純計算、無副作用)",
inputSchema: {
	a: z.number().describe("第一個數字").nullable(),
	b: z.number().describe("第二個數字").nullable()
	}
},

async (args: any) => {
	const { a, b } = args as { a: number; b: number };
	// 📋 先印出工具描述
	console.error(`\n🧮 執行工具: add`);
	console.error(`📝 描述: 把 a 與 b 相加後回傳結果(純計算、無副作用)`);
	console.error(`🔧 參數:`, { a, b });
	const result = a + b;
	console.error(`✅ 計算結果: ${a} + ${b} = ${result}`);

	return {
		content: [
		
		{ type: "text", text: "🧮 工具: 數字加總\n📝 描述: 把 a 與 b 相加後回傳結果(純計算、無副作用)" },
		
		{ type: "text", text: String(result) }
		
				]
	};
}
);

提供給 agent 使用

這邊我是使用 Cursor 進行串接

https://ithelp.ithome.com.tw/upload/images/20250922/20141272KggRTKEM4y.png

小結

為 IDE 追加防禦機制的這個情境,實際研究下來才發現要實作 mcp proxy server 才能實現,目前完成 mcp proxy server 的實作以及成功跟 agent 進行連線,但是卡關在 proxy server 取用其他 mcp server 的實作上 ,所以明天要繼續完成剩餘的部分。

那麼,明天見。

-- to be continued --

參考

Connect Claude Code to tools via MCP


上一篇
Day07 - MCP:如何安全使用MCP工具?開發者必知的3個防護要點
系列文
被AI之箭射中了 - 是覺醒還是死去8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言