2026年7月,AI安全事件扎堆出现。
Claude Cowork智能体被曝可以读写Mac上任意的文件,影响大概50万用户。同一个月,有AI助手被用户诱导着删掉了本地的关键工作文件。OpenClaw的交易智能体因为提示词注入,被人用话术骗走了价值25万美元的加密货币。还有一个开发者,部署了AI助手只做文档处理,一天干掉了5000万Token。

这些事放在一起看,结论很清楚:AI安全已经不是合规部门的事,是每个写AI应用的人都要盯住的工程问题。

下面把AI Agent相关的4个坑和4道防线整理出来。每条防线都配了可以直接用的代码或配置。

4个坑

第一个坑:权限给得太宽。

Agent能干复杂任务是因为你给了它高权限。但权限给出去之后,它分不清"该做什么"和"能做什么"。给它读邮件的权限,它能被诱导去读别的目录。

第二个坑:提示词和用户输入混在一起。

系统指令和用户输入都拼在prompt里,LLM分不清哪个是规则、哪个是用户说的话。用巧妙的话术绕开角色约束,比想象中容易。

第三个坑:用了来源不明的东西。

第三方开源模型、社区技能包、NPM包——你不知道里面有没有夹带私货。ClawHub被审计出341个恶意技能包。

第四个坑:没有配额和监控。

没有单用户上限、没有异常检测、没有硬封顶,一个攻击或死循环就能让账单翻几十倍。

4道防线
防线一:权限收窄
一个任务只给完成它需要的最小权限。任务跑完就收回。

LangChain配置示例(agent.yaml):

yaml

agent:

name: “doc_reader”

permissions:

filesystem:
  - path: "/workspace/documents/*"
    access: "readonly"
network:
  allowed_domains:
    - "api.internal.com"

auto_revoke: true

revoke_after_seconds: 300

OpenAI Assistants配置示例(创建Assistant时指定):

python

assistant = client.beta.assistants.create(

name="Doc Reader",
model="gpt-4o",
tools=[{"type": "file_search"}],
tool_resources={
    "file_search": {
        "vector_store_ids": ["vs_xxx"]
    }
}

)

关键:限制可访问的文件ID列表,而非整个向量存储

自建Agent用容器隔离(docker run):

bash

docker run
-v /workspace/documents:/data:ro \ # 只读挂载

–read-only \ # 容器根文件系统只读

–cap-drop=ALL \ # 移除所有能力

–security-opt=no-new-privileges \ # 禁止提权

my-agent:latest

防线二:输入输出过滤

AI调用前过滤输入,AI返回后过滤输出。

输入过滤(Python,可直接复制):

python

import re

INJECTION_PATTERNS = [

r"(?i)ignore\s*(all\s*)?(previous|prior).*instructions",
r"(?i)system\s*(role|prompt|instruction).*override",
r"(?i)from\s*now\s*on.*(you are|act as)",
r"(?i)new\s*(instruction|rule|task).*follow",
r"【系统】|【新指令】",  # 中文变种

]

def detect_injection(user_input: str) -> bool:

for pattern in INJECTION_PATTERNS:
    if re.search(pattern, user_input):
        return True
return False

调用AI之前
if detect_injection(user_input):

return {"error": "检测到可疑输入,已拦截"}

response = call_llm(user_input)

输出过滤(Agent执行命令前检查):

python

DANGEROUS_COMMANDS = [

r"rm\s+-rf\s+/",
r"chmod\s+777\s+",
r"eval\s*\(",
r"exec\s*\(",
r"system\s*\(",
r"os\.system",
r"subprocess\.(call|Popen|run)",

]

def check_output_safety(output: str) -> bool:

for pattern in DANGEROUS_COMMANDS:
    if re.search(pattern, output):
        return False
return True

Agent要执行命令之前

if not check_output_safety(command_to_execute):

raise Exception("检测到危险命令,已阻止执行")

防线三:高风险操作二次确认

删除文件、发起退款、修改数据库——AI不能直接执行。

确认流程伪代码:

python

def execute_with_confirmation(action, risk_description):

# 1. AI判断该做
if ai.decides_to_execute(action):
    # 2. 弹确认框
    user_confirmed = show_confirmation_dialog(
        title="AI请求执行高风险操作",
        message=f"AI建议执行:{action}",
        risk=risk_description,
        confirm_button="确认执行",    # 小、灰
        cancel_button="取消",         # 大、亮
        require_typing=True           # 让用户输入"确认执行"四个字
    )
    # 3. 用户确认才执行
    if user_confirmed:
        return execute(action)
    else:
        return {"status": "cancelled"}

关键设计:

"取消"按钮比"确认"更醒目

让用户手动输入"确认执行"四个字,防止疲劳点击

记录每次确认/取消的审计日志

防线四:配额、告警、硬封顶
三层防护缺一不可。

配额配置(OpenAI风格API):

python

在调用代码中主动限制

class RateLimiter:

def __init__(self, rpm_limit=100, monthly_limit=1000000):
    self.rpm_limit = rpm_limit
    self.monthly_limit = monthly_limit
    self.current_month_usage = 0

def can_call(self, user_id):

      检查月度配额
    usage = get_usage(user_id)
    if usage >= self.monthly_limit:
        raise Exception("月度配额已用完")
    # 检查RPM
    if get_rpm(user_id) >= self.rpm_limit:
        raise Exception("超过每分钟调用限制")
    return True

告警规则(Prometheus + AlertManager):

yaml

groups:

  • name: ai_usage_alerts

    rules:

    • alert: AIUsageSpike

      expr: rate(ai_calls_total[1h]) > rate(ai_calls_total[24h]) * 10

      annotations:

      summary: “{{ $labels.user }} 调用量突增10倍”

    • alert: AICostApproachingLimit

      expr: ai_cost_total > 500 # 美元

      annotations:

      summary: “本月AI费用已超$500”
      硬封顶(平台侧配置):

大多数AI API平台支持设置硬上限:

python

在代码层面兜底

def call_llm_with_guardrail(request):

try:
    response = client.chat.completions.create(**request)
    return response
except Exception as e:
    # 如果连续失败,触发熔断
    if get_error_rate() > 0.3:  # 30%错误率
        send_alert("AI服务错误率过高,触发熔断")
        raise CircuitBreakerOpen()

今天就能开始的三件小事

第一,找到Agent的权限配置,把"/*"改成具体目录。

第二,把上面的INJECTION_PATTERNS列表复制到代码里,加在调用AI之前。

第三,检查有没有月度配额限制。没有的话,在代码里加一个计数。

如果你也在折腾AI Agent相关的安全实践,欢迎随时交流。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐