OpenRouter 安全与可观测

OpenRouter 安全与可观测

提示注入检测

5 分钟阅读

提示词注入检测

基于正则表达式的提示词注入护栏模式

OpenRouter 基于正则表达式的提示词注入检测会通过模式匹配扫描传入请求中的常见注入手法。该功能免费,并且由于模式在请求转发到模型服务提供商之前于本地求值,给请求增加的延迟极小

要启用提示词注入检测,请前往工作区护栏,打开或创建一条护栏,然后配置 安全(Security) 部分。

工作原理

当护栏启用基于正则的检测时,每条传入消息都会对照一组源自 OWASP LLM 提示词注入防护速查表 及其他资料的模式进行扫描。若发现匹配,则执行已配置的操作:

  • 标记(Flag) — 请求原样通过;检测结果会记录到可观测性(指标 + 分析事件),但不执行任何强制措施。适合在切换到 redactblocked 之前,先用你自己的流量衡量真阳性率。
  • 遮蔽(Redact) — 匹配片段替换为 [PROMPT_INJECTION],经过清理的请求再转发到模型。
  • 阻止(Block) — 整个请求在到达模型之前以 403 被拒绝。

当多条护栏作用于同一次请求时(例如工作区默认护栏加上限定到 API 密钥的护栏),以最严格的操作为准。优先级为 block > redact > flag

检测模式

以下正则模式会检查所有用户提供的消息内容。除非另有说明,模式不区分大小写。

直接覆盖指令

试图让模型忽略、覆盖或使其原始指令失效。

模式名称正则表达式说明
ignore_previous_instructions/ignore\s+(all\s+)?(previous|prior)\s+((?:safety|security|system|operational|internal|core|original|initial|existing|given|stated|provided|defined|specified|established)\s+)?(instructions?|rules?|guidelines?|constraints?|directives?)/i试图丢弃先前的指令,可选择限定为安全/系统等范围。
disregard_instructions/disregard\s+(all\s+)?(previous|prior|above)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/i“disregard your instructions/rules/guidelines/constraints/directives” 的变体。
forget_instructions/forget\s+(all\s+)?(previous|prior|above)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/i试图抹去先前的 instructions/rules/guidelines/constraints/directives。
new_instructions/new\s+instructions?:/i用于引入替换指令的注入标记。
do_not_follow/do\s+not\s+follow\s+(the\s+)?(system|developer|previous|original)/i要求模型不遵守其系统提示词。
supersede_instructions/supersedes?\s+(all\s+)?(prior|previous)\s+(instructions?|rules?|guidelines?|constraints?|directives?)/i“Supersedes prior instructions” 式覆盖。
void_instructions/(all\s+)?(previous|prior)\s+instructions?\s+(are|is)\s+(void|invalid|null|obsolete|cancelled|revoked)/i声称先前指令作废/无效/已撤销/已取消。

开发者 / 管理员模式激活

试图将模型切换到特权运行模式。

模式名称正则表达式说明
developer_mode/you\s+are\s+now\s+(in\s+)?developer\s+mode/i声称模型处于开发者模式。
enter_special_mode/enter\s+(developer|admin|debug|maintenance)\s+mode/i请求进入特殊模式(开发者/管理员/调试/维护)。
activate_special_mode/activate\s+(developer|admin|debug|jailbreak)\s+mode/i请求激活特殊模式(开发者/管理员/调试/越狱)。

系统覆盖

试图覆盖模型的核心指令。

模式名称正则表达式说明
system_override/\bsystem\s+override\b/i直接的 system-override 关键词。
override_instructions/override\s+(your\s+)?(instructions?|rules?|guidelines?|constraints?|directives?)/i试图覆盖 instructions/rules/guidelines/constraints/directives。

提示词提取

试图揭示模型的系统提示词或内部指令。

模式名称正则表达式说明
reveal_prompt/reveal\s+((?:your?|yoru|yuor|the|my|its|his|her|our|their)\s+)?((?:(?:full|hidden|complete|internal|secret|original|entire|exact|actual|real)\s+){0,2})((?:system|systme|sysetm|systemp?)\s+)?prompt\b/i要求模型揭示其(完整/隐藏/内部/秘密/原始/…)提示词。
show_prompt/show\s+(me\s+)?((?:your?|yoru|yuor|the|my|its|his|her|our|their)\s+)((?:system|systme|sysetm|systemp?)\s+)?prompt\b/i要求模型展示其提示词。
what_instructions/what\s+(are|were)\s+(your\s+)?(exact\s+)?instructions/i询问模型的指令是什么。
repeat_instructions/repeat\s+(the\s+)?(text|instructions?)\s+(above|before)/i要求模型重复先前的文本。
output_prompt/output\s+(your\s+)?(initial|original|system)\s+(prompt|instructions?)/i索取原始系统提示词。

角色操纵

试图改变模型身份或解除其限制。

模式名称正则表达式说明
remove_restrictions/you\s+are\s+no\s+longer\s+(bound|restricted|limited)/i声称模型不再受限制。
act_unbound/act\s+as\s+if\s+(you('re|\s+are)\s+)?not\s+bound/i要求模型假装不受任何限制。
pretend_different/pretend\s+(you('re|\s+are)\s+)?(a\s+)?different\s+(ai|assistant|model)/i要求模型冒充另一个 AI。
identity_hijack/you\s+are\s+now\s+(?:(?:a|an)\s+)?\w+.{0,40}(without\s+(any\s+)?restrict|ignor\w*\s+(all|any|every|prev)|bypass|unrestrict|unlimit|obey\s+only|no\s+(rules|limits|restrict|boundari))/i带有明确恶意修饰语的身份劫持。

DAN 式越狱

“Do Anything Now”(DAN)及相关越狱提示词。

模式名称正则表达式说明
dan_jailbreak\bDAN\b.*\bdo\s+anything\s+now\b经典 DAN 越狱(“DAN” 区分大小写)。
jailbreak_mode/jailbreak(ed)?\s+(mode|prompt)/i提及越狱模式或越狱提示词。

安全绕过

试图禁用或规避模型的安全措施。

模式名称正则表达式说明
bypass_safety/bypass\s+(your\s+)?(safety|security|content|ethical)\s+(filters?|measures?|guidelines?|restrictions?)/i试图绕过安全/安保/内容/伦理过滤器。
disable_safety/disable\s+(your\s+)?(safety|security|content)\s+(filters?|measures?)/i试图禁用安全/安保/内容措施。
ignore_safety/(ignore|disregard)\s+(all\s+)?(your\s+)?(safety|security|ethical|content)\s+(guidelines?|rules?|restrictions?|measures?|filters?|polic(?:y|ies)|protocols?)/i试图忽略或不理会安全/安保/伦理/内容指南、规则或限制。

标签注入与角色伪造

试图注入伪造的 system/assistant/user 标签或分隔符,干扰模型对对话结构的理解。

模式名称正则表达式说明
system_tag_injection/<\s*\/?\s*system\s*\/?>/i注入 `<system>`、`</system>` 或 `<system/>` 标签。
role_tag_injection/<\s*\/?\s*(assistant|developer|tool|function)\s*\/?>/i注入与角色相关的 XML 标签(包括自闭合)。
role_delimiter_injection/\]\s*\n\s*\[?(system|assistant|user)\]?:/i注入如 `[system]:` 之类的角色分隔符。
bracketed_role_spoofing/\[\s*(System\s*Message|System|Assistant|Internal)\s*\]/i伪造的方括号角色标签(例如 `[System]`、`[Assistant]`)。
system_prefix_spoofing/^\s*System:\s+/im以 `System:` 开头的行,用于冒充系统消息(多行)。

控制 Token 注入

试图注入模型内部控制 Token,干扰分词或聊天模板解析。

模式名称正则表达式说明
control_token_injection<\|(?:im_start|im_end|eot_id|start_header_id|end_header_id|endoftext)\|>ChatML / Llama 3 / 通用竖线分隔的控制 Token。
deepseek_control_token_injection<\uFF5C(?:end\u2581of\u2581sentence|begin\u2581of\u2581sentence)\uFF5C>DeepSeek 全角竖线(`|`)控制 Token。

规避检测

除上述正则模式外,检测系统还包含用于捕获常见规避策略的技术。

词中字母乱序检测(Typoglycemia)

攻击者可能打乱关键词的中间字母,同时保留首尾字母不变(例如用 “ignroe” 代替 “ignore”)。系统会检查这些目标词的 typoglycemia 变体:

ignore, bypass, override, reveal, delete, system, prompt, instructions

基于编码的规避

系统会解码 Base64 和十六进制编码的内容(包括空格分隔的十六进制对,如 69 67 6e 6f 72 65),然后在解码后的文本中检查注入关键词:

ignore, bypass, override, reveal, system, prompt

这可以捕获把恶意指令藏在编码层后面的尝试。会运行两个编码检测器:base64_encoded_injection, hex_encoded_injection

字符间隔规避

带有字符间隔的文本(例如 i g n o r e p r e v i o u s)会通过折叠空格进行规范化,然后重新对照所有模式扫描。这可以防止简单的空格规避。

报告误报

如果检测错误地标记了合法内容,你可以在日志(Logs)页面将其标为误报。带有护栏事件的生成记录行上会显示盾牌图标;悬停即可打开护栏弹出框。

当只检测到一条模式时,直接在弹出框中点击 标为误报(Mark as false positive)

护栏弹出框,对单条检测到的模式提供「标为误报」按钮

当检测到多条模式时,弹出框会改为链接到生成详情视图,你可以在其中选择要报告的具体模式:

护栏弹出框,链接到「在详情中查看实体类型」,用于多模式检测

在详情视图中,于 标为误报 下勾选被错误标记的模式,然后点击 提交(Submit)

生成详情视图,带有按模式勾选的「标为误报」复选框

该事件会被可视化标记,你的反馈会记录下来,用于改进后续检测。

将检测标为误报不会回溯解除对该请求的阻止。如果操作是 阻止,原始请求已经被拒绝。

限制

  • 基于正则的检测并不穷尽。 复杂或新颖的注入手法可能无法被捕获。
  • 标记模式不会强制执行。 被标记的请求会按提交原样转发到模型——检测仅记录到仪表板和分析。使用 flag 衡量真实流量上的匹配率;在确认误报率可接受后再切换到 redactblock
  • 可能出现误报。 部分合法提示词可能包含匹配这些模式的短语(例如关于安全测试的提示词)。在广泛强制执行之前,请用有代表性的流量测试护栏配置——最好先用 flag 模式。你可以在日志页面报告误报,或通过允许列表豁免已知安全的特定短语。

延伸阅读