iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
生成式 AI

別讓駭客拿走你的AI控制權:MCP x n8n 防禦實戰全攻略系列 第 10

# MCP × n8n - 短時間多次觸發資料庫工具

  • 分享至 

  • xImage
  •  

今天設計 短時間行為監控。目的是避免攻擊者在獲得 API Key 後,短時間內瘋狂觸發敏感的資料庫工具(如 query_database 或 delete_database),造成資料外洩或刪除。

MCP 檢查異常操作

在 MCP Server 的工具程式碼中,我新增了邏輯:
針對資料庫相關關鍵字(select, delete, update, insert…)做計數
記錄最近 60 秒的執行次數,當超過 3 次以上時,立即回傳「已鎖定」訊息,並進入 60 秒冷卻

def _check_rate_limit(tool: str) -> tuple[bool, str]:
    global _db_action_logs, _last_lock_until

    now = datetime.now()

    # 如果還在鎖定時間內直接拒絕
    if _last_lock_until and now < _last_lock_until:
        return False, f"{tool} 已被鎖定,請稍後再試 (解鎖時間: {_last_lock_until.strftime('%H:%M:%S')})"

    # 保留 60 秒內的紀錄
    _db_action_logs = [t for t in _db_action_logs if (now - t).seconds < 60]
    _db_action_logs.append(now)

    # 如果超過閾值 → 啟動鎖定
    if len(_db_action_logs) >= 3:  # 閾值 60 秒內 3 次
        _last_lock_until = now + timedelta(seconds=60)
        _db_action_logs = []
        return False, f"偵測到短時間過多資料庫操作,鎖定 60 秒 (到 {_last_lock_until.strftime('%H:%M:%S')})"

    return True, "ok"

n8n 判斷並寫入 Notion

n8n Workflow 的最後,我加了一個 IF 判斷式:
如果後端回傳 alert: true 或帶有「鎖定」字樣,就直接將訊息寫入 Notion Page,留下安全紀錄
https://ithelp.ithome.com.tw/upload/images/20250924/20168687GVBXgWVvlB.png

這樣一來,即使使用者在前端仍然嘗試呼叫工具,我也能在 Notion 日誌裡看到完整記錄,方便事後追查。

實際演示

初始 Notion 狀態
https://ithelp.ithome.com.tw/upload/images/20250924/201686870TQNr2miTi.png

嘗試多次觸發
https://ithelp.ithome.com.tw/upload/images/20250924/2016868736oSyVdWMD.png

Notion 結果
https://ithelp.ithome.com.tw/upload/images/20250924/20168687FueKrfOK7M.png

結論

這套設計有兩層好處:

  1. 後端即時攔截:短時間異常操作會自動鎖定,避免災難。
  2. 前端日誌落地:透過 Notion 或其他外部系統,將異常操作紀錄下來,做到事後追蹤。
    這不只是單純的防禦,而是把 偵測、阻擋、追蹤 三件事整合起來,讓系統更完整。

上一篇
# 防禦策略 #3:最小權限設計 — MCP 只能呼叫特定工具
下一篇
# 模擬攻擊 — MCP 惡意工具讓 n8n 幫忙掃 Port
系列文
別讓駭客拿走你的AI控制權:MCP x n8n 防禦實戰全攻略12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言