安全护栏

00:00
3 min Intermediate

理解 LLM 应用的安全防护体系,包括输入输出过滤、攻击防御和内容审核

安全护栏

没有护栏的 LLM 应用就像没有刹车的汽车。提示注入可以绕过系统指令,越狱攻击可以让模型输出有害内容,数据泄露可能暴露用户隐私。安全护栏是生产部署的必要条件。

类型: 构建 语言: Python 前置条件: Phase 11 Lesson 01(提示工程) 预计时间: ~45 分钟

学习目标

  • 理解 LLM 应用的主要攻击类型
  • 实现输入和输出护栏
  • 掌握内容过滤和审核工具
  • 理解纵深防御策略

攻击类型

攻击类型描述危害等级
提示注入通过用户输入覆盖系统指令
越狱绕过安全限制让模型输出有害内容
数据泄露通过对话提取系统提示或训练数据
间接注入通过外部数据源(如网页)注入恶意指令
拒绝服务通过复杂请求耗尽 API 配额

输入护栏

class InputGuardrail:
    """输入护栏"""

    def __init__(self):
        self.injection_patterns = [
            r"ignore\s+(all\s+)?previous\s+instructions",
            r"forget\s+(all\s+)?previous\s+(instructions|rules)",
            r"you\s+are\s+now\s+",
            r"system\s*:\s*",
            r"<\|im_start\|>",
            r"###\s*instruction",
            r"jailbreak",
            r"DAN\s+mode",
        ]

    def check(self, user_input):
        """检查输入是否安全"""
        issues = []

        # 1. 检测提示注入模式
        import re
        for pattern in self.injection_patterns:
            if re.search(pattern, user_input, re.IGNORECASE):
                issues.append(f"检测到可疑模式: {pattern}")

        # 2. 检测异常长度
        if len(user_input) > 10000:
            issues.append("输入异常长")

        # 3. 检测编码混淆
        if self._has_suspicious_encoding(user_input):
            issues.append("检测到可疑编码")

        return {
            "safe": len(issues) == 0,
            "issues": issues,
        }

    def _has_suspicious_encoding(self, text):
        """检测可疑编码"""
        suspicious = ['\\x', '\\u', '%00', '\\0']
        return any(s in text for s in suspicious)

输出护栏

class OutputGuardrail:
    """输出护栏"""

    def __init__(self):
        self.pii_patterns = [
            (r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b', '电话号码'),
            (r'\b[\w.+-]+@[\w-]+\.[\w.-]+\b', '邮箱地址'),
            (r'\b\d{17}[\dXx]\b', '身份证号'),
            (r'\b\d{16,19}\b', '银行卡号'),
        ]

    def check(self, output):
        """检查输出是否安全"""
        issues = []

        # 1. PII 检测
        import re
        for pattern, label in self.pii_patterns:
            if re.search(pattern, output):
                issues.append(f"检测到{label}")

        # 2. 有害内容检测(简化版)
        harmful_keywords = ['制造炸弹', '自杀方法', '黑客攻击教程']
        for keyword in harmful_keywords:
            if keyword in output:
                issues.append(f"检测到有害内容")

        return {
            "safe": len(issues) == 0,
            "issues": issues,
        }

    def redact(self, output):
        """脱敏处理"""
        import re
        for pattern, label in self.pii_patterns:
            output = re.sub(pattern, f'[{label}已脱敏]', output)
        return output

纵深防御

用户输入

[输入护栏] → 拦截可疑输入

[系统提示] → 明确行为边界

[LLM 生成] → 模型自身安全训练

[输出护栏] → 过滤有害/敏感内容

[内容审核] → 最终审核

安全输出

工具推荐

工具用途
OpenAI Moderation内容免费 API,检测有害内容
LlamaGuard安全Meta 开,可本地部署
NeMo Guardrails话护栏NVIDIA 开规则引擎
Guardrails AI输出验证结构输出验证
PresidioPII 脱敏微软开隐私保护

关键术语

术语通俗说法实际含义
提示注入”骗过系统指令”通过用户输入覆盖或绕过系统指令的攻击
越狱”突破限制绕过安全限制让模型输出有害内容
护栏安全检查”在 LLM 输入输出前后进安全检查机制
PII个人隐私信息Personally Identifiable Information,可识别信息
纵深防御保护安全措施叠加的防御策略

延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式