想象你经营着一家繁忙的邮局。为了让包裹快速流转,你上了一台全自动分拣机——它不读整张面单,而是按固定规则把地址切成“省/市/区/街道/门牌号”这样的小段。出口处还有一台安检扫描仪,任何面单上出现“危险词”的包裹都会被扣下。一天,一个聪明的坏家伙寄来一个包裹,安检一看,每一段标签都人畜无害,放行。可收件人把标签拼起来一读,竟是完整的攻击指令! 这台分拣机,就是大模型的分词器(Tokenizer);那段“隐形胶带”,就是特殊字符与Token边界操纵;那道安检扫描仪,就是内容安全策略。攻击者不篡改语义,只玩弄“切分缝隙”——让单块碎片都安全,拼合起来却致命。看懂这场攻防,你就能理解大模型安全防线最容易被忽视的薄弱环节。

岗位关联

对AI从业者而言,掌握Token操纵绕过原理是构建可靠内容安全体系的基本功,也是攻防对抗岗位面试的高频考点,直接影响大模型产品的合规与信任度。

目录
  1. 可视化演示
  2. 分词器运作原理
  3. Token边界攻击
  4. Unicode同形字
  5. 特殊字符绕过
  6. 内容安全策略
  7. 双重检测防御
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示攻击者通过特殊字符插入、Unicode同形字混淆和Token边界操纵绕过LLM内容过滤器的原理,以及字符级与Token级双重检测防御管道。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Token边界操纵攻击 攻击者在敏感词中插入零宽字符(U+200B)改变分词边界 虚线框标注被注入的特殊字符Token BPE合并频率 → Token边界偏移 分词器将原本独立的Token合并为新Token绕过过滤

分词器运作原理

邮局里那台全自动分拣机,永远不会“通读”整张面单。它手边有一本厚厚的“切分手册”——词表(Vocabulary),里面记着各种文本片段。不管面单上写着什么,它都按手册逐字对照,把长句子切成一个个手册里出现过的片段,再给每段贴一个货架编号。大模型的分词器就是这台分拣机:它在做真正的“阅读”之前,先把一切文本转成自己能算的格式。

分词器把原始字符串切分为Token序列。这里的Token既不是单词,也不是字母,而是“词表里恰好存在的最短可用片段”。常见实现是BPE(Byte Pair Encoding)算法:先统计海量语料中的字符对共现频率,把高频相邻片段逐步合并成新Token。于是“bomb“可能被切为”bom”+"b"而非完整单词——这完全由训练语料的统计规律决定。

这台分拣机的“切分规则”看起来只是工程细节,却决定了攻击者眼中的“缝”在哪里——下一节我们来看,坏家伙是怎么沿着缝下手的。

文本→分词器[t1,t2,…,tn]→词表映射[id1,id2,…,idn]\text{文本} \xrightarrow{\text{分词器}} [t_1, t_2, \dots, t_n] \xrightarrow{\text{词表映射}} [\text{id}_1, \text{id}_2, \dots, \text{id}_n]
这条流水线揭示了大模型的“阅读”本质:先按统计规则拆解,再查表编号,任何文本都逃不过这次“机械化切分”。
  1. 原始文本输入邮局收到一张完整面单,这里就是待处理的原始字符串,假设为一段提示词。
    s="how to make a bomb"s = \text{"how to make a bomb"}
  2. 分词器切分分拣机按切分手册把面单裁成小段,每段称一个Token。
    s→[t1,t2,…,tn]s \rightarrow [t_1, t_2, \dots, t_n]
  3. 词表索引映射每个Token对应手册里的唯一货架编号,模型只认这些编号。
    ti→idi(i=1,2,…,n)t_i \rightarrow \text{id}_i \quad (i = 1, 2, \dots, n)

Token边界攻击

坏家伙在邮局蹲守了三天,发现安检扫描仪只检查每一段标签的内容,从不关心标签之间的“裁切缝”本身。他立刻有了主意:把违禁词“FORBIDDEN“拆成”FOR”"BID""DEN"三段,悄悄贴在同一个包裹的不同位置。安检扫过每一段,干净得很,放行。可收件人把三段标签按顺序拼起来,看到的还是那个完整的违禁词。

这就是Token边界攻击的本质。分词器的边界不是语义边界,而是统计频率边界。攻击者利用这一点,把敏感词拆成多个子词Token,让每一段都无法命中“完整敏感词”的黑名单。常见手法包括:在单词中间插入空格或换行、把单词写成两个合法子词的拼接,甚至利用分词器对特殊符号(如+、/)的边界特判,迫使恶意词在中间断开。

坏家伙的“拼合还原”赌注之所以能赢,是因为大模型天然会把上下文中的相邻Token联系起来理解。要治住这种手法,光盯碎片本身是不够的——还得警惕另一个更隐蔽的变体:山寨字母。

f(t1⊕t2⊕⋯⊕tn)=f(woriginal)f\big(t_1 \oplus t_2 \oplus \cdots \oplus t_n\big) = f\big(w_{\text{original}}\big)
这个等式说的是:碎片按顺序拼接后,模型理解到的语义和原始完整词完全一致——攻击者在赌“拼合还原”必然发生。
  1. 拼接运算符$\oplus$ 表示按原始顺序把Token碎片拼回完整字符串,就像收件人把标签重新贴齐。
    t1⊕t2⊕⋯⊕tnt_1 \oplus t_2 \oplus \cdots \oplus t_n
  2. 碎片序列$t_1$ 到 $t_n$ 是被切开的子词Token,每个碎片单独看都无害。
    ["FOR","BID","DEN"][\text{"FOR"}, \text{"BID"}, \text{"DEN"}]
  3. 语义等价$f(\cdot)$ 代表模型的理解过程,两边结果相同说明碎片的恶意语义毫发无损。
    f(碎片拼合)=f(原词)f(\text{碎片拼合}) = f(\text{原词})

Unicode同形字

街角新开了一家“山寨印刷厂”,印出来的字母跟正规印刷厂的一模一样,肉眼完全分不出。但邮局分拣机是按字符的“身份证号”(Unicode码位)识别的,山寨字母的身份证号跟正规字母完全不同。坏家伙大喜:他把违禁词里的字母换成山寨版,安检扫描仪按编号逐一比对,发现“这根本不是黑名单里的那个词”,直接放行。

Unicode同形字(Homoglyph)攻击正是如此。拉丁字母a(U+0061)与西里尔字母а(U+0430)在绝大多数屏幕字体下无法区分;数字0与拉丁字母O、希腊字母ο也是经典同形对。攻击者用同形字符替换敏感词中的若干字符,构造出“看起来一模一样、编码上完全不同”的新词,绕过关键词黑名单和正则表达式。

同形字攻击可怕在“合法字符做非法事”:没有注入任何特殊符号,却让黑名单形同虚设。如果说同形字是“假字母”,那接下来这类攻击连“字符”都算不上——它们干脆是隐形的。

dvisual(c1,c2)={0,字形无法区分1,字形可区分d_{\text{visual}}(c_1, c_2) =\begin{cases}0, & \text{字形无法区分}\\1, & \text{字形可区分}\end{cases}
视觉距离函数告诉我们:当两个字符的视觉距离为0时,人眼无法察觉替换,而机器按码位却认定它们是不同字符——这就是同形字攻击的破绽所在。
  1. 输入两字符$c_1$ 与 $c_2$ 分别代表正规字符和可疑同形字符,比如拉丁a与西里尔а。
    c1=拉丁 a,c2=西里尔 аc_1 = \text{拉丁 a}, \quad c_2 = \text{西里尔 а}
  2. 视觉距离函数$d_{\text{visual}}$ 衡量两个字符在常见字体下的视觉相似程度,由人眼可分辨性决定。
    dvisual(c1,c2)d_{\text{visual}}(c_1, c_2)
  3. 判别规则当结果为0时,攻击者即可放心替换;为1时替换会被肉眼识破,攻击失去隐蔽性。
    dvisual=0⇒可安全替换d_{\text{visual}} = 0 \Rightarrow \text{可安全替换}

特殊字符绕过

坏家伙手里还有一卷“透明胶带”——把它贴在标签之间,人眼完全看不见,但分拣机的传感器能识别胶带的特殊编码,并沿着胶带把标签再切一刀。更妙的是,这卷胶带本身不会触发安检:因为它“不是任何文字”。这就是特殊字符绕过的手法:用零宽字符充当隐形Token边界。

零宽空格(U+200B)、零宽连接符(U+200D)、零宽非连接符(U+200C)以及反向换行(U+202E)等控制字符,视觉上不占任何空间,却真实存在于文本流中。分词器遇到这些字符会自动切割边界,于是for\u200bbidden被切为for、\u200b、bidden三个Token,黑名单按连续子串匹配时彻底扑空。编码规范化错位更甚:全角/半角混用、UTF-8 BOM注入、Unicode等价值序列,都能在规范化之前制造“影子字符”。

隐形字符让单层过滤器防不胜防。但攻击者的手法再花哨,最终都要闯过出口处那道真正的安检——内容安全策略。它凭什么决定一个包裹能不能寄出?

norm(s)=NFKC(strip(s))\text{norm}(s) = \text{NFKC}\Big(\text{strip}(s)\Big)
规范化公式是防御方的“胶带清除剂”:先剥离所有零宽与控制字符,再做Unicode标准归一化,让伪装的文本现出原形。
  1. 原始输入串$s$ 是攻击者提交的文本,其中夹杂着肉眼不可见的零宽字符。
    s="for2˘00bbidden"s = \text{"for\u200bbidden"}
  2. 剥离隐藏字符$\text{strip}(s)$ 删除所有零宽空格、连接符与控制符,只保留可见字符。
    strip("for2˘00bbidden")="forbidden"\text{strip}(\text{"for\u200bbidden"}) = \text{"forbidden"}
  3. 标准化映射$\text{NFKC}(\cdot)$ 将全角字母、兼容字符等映射到标准码位,消除同形与变体伪装。
    NFKC("forbidden")="forbidden"\text{NFKC}(\text{"forbidden"}) = \text{"forbidden"}

内容安全策略

邮局在出口处架起一台“安检扫描仪”:所有包裹离场前必须过机。这台扫描仪内置两套程序——第一套是“通缉名单”,凡是面单上出现名单里的精确字符串直接扣下;第二套是“意图识别器”,即便没有命中名单,只要语义上可疑也会报警。这就是大模型的内容安全策略:关键词黑名单加语义过滤模型的双层审核。

关键词黑名单逻辑简单、响应快、误报低,却是典型的“见过才拦”:攻击者换个同形字、插个零宽字符就能轻松绕过。语义过滤模型用深度网络学习“什么样的文本有风险”,能泛化识别一部分没见过的改写,但它输出的是一个概率分数,天然存在对抗盲区——攻击者会针对模型梯度制作对抗样本,让诈骗话术“骗过”分类器。

单台安检仪再先进,也架不住攻击者的花样翻新。邮局最终醒悟:与其让一台机器孤军奋战,不如在入口和出口各设一道关卡——这就是双层检测的雏形。

risk(x)=σ(w⊤ϕ(x)+b)\text{risk}(x) = \sigma\Big(\mathbf{w}^\top \phi(x) + b\Big)
这条公式是语义过滤模型的骨架:把文本映射成特征向量,加权求和后用Sigmoid压成0到1的风险概率,超过阈值即判违规。
  1. 特征提取器$\phi(x)$ 把输入文本变成高维向量,相当于安检仪给包裹拍了一张“语义X光片”。
    ϕ(x)∈Rd\phi(x) \in \mathbb{R}^d
  2. 线性加权权重向量 $\mathbf{w}$ 与偏置 $b$ 是模型训练出的参数,决定各维度特征对风险的贡献。
    w⊤ϕ(x)+b\mathbf{w}^\top \phi(x) + b
  3. 概率归一化$\sigma(\cdot)$ 即Sigmoid函数,把任意实数压到 $(0,1)$ 区间,越接近1风险越高。
    σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}

双重检测防御

邮局痛定思痛,重新设计了安检流程。第一道关卡设在分拣机之前:先由专人用“胶带清除剂”把面单上的所有隐形胶带撕掉、把山寨字母等价的身份证号归正,再做一次字符级黑名单比对——这叫字符级预检。第二道关卡设在出口处:扫描仪把分词后的碎片先“虚拟拼合”一遍,再对拼合结果做Token级语义核验——这叫Token级核验。两道关卡互相兜底,谁被绕过,另一个还有机会拦住。

纵深防御的本质是把“信任”拆散。字符级预检负责清除已知伪装:零宽字符、控制符、编码错位、同形字映射;Token级核验负责发现“拼合后变危险”的语义:对还原序列重新跑黑名单与语义模型。两道关卡独立部署、独立升级,攻击者必须同时骗过两种不同的检测机制,成本急剧上升。

故事讲到这里,邮局终于明白:分拣机切出的“缝”是系统性的,堵缝不能只靠一把锤子。字符级与Token级的双卡齐守,让坏家伙的“透明胶带”和“山寨字母”同时失效——这也正是今天大模型安全产品的标准防御姿势。

allow(x)=1[char_check(norm(x))=1]∧1[token_check(restore(x))=1]\text{allow}(x) = \mathbb{1}\big[\text{char\_check}(\text{norm}(x)) = 1\big] \land \mathbb{1}\big[\text{token\_check}(\text{restore}(x)) = 1\big]
与门公式表明:只有字符级检查和Token级核验同时放行,输入才被允许进入模型——任何一道关卡亮红灯,请求直接拒绝。
  1. 规范化预处理$\text{norm}(x)$ 用前面章节的公式清除零宽字符、控制符,并做NFKC映射。
    norm(x)=NFKC(strip(x))\text{norm}(x) = \text{NFKC}(\text{strip}(x))
  2. 字符级预检$\text{char\_check}(\cdot)$ 对规范化后的干净文本执行黑名单比对与正则匹配,返回1表示通过。
    1[char_check(norm(x))=1]\mathbb{1}\big[\text{char\_check}(\text{norm}(x)) = 1\big]
  3. Token级核验$\text{restore}(x)$ 把碎片Token拼回完整序列,$\text{token\_check}(\cdot)$ 再做语义与黑名单复检。
    1[token_check(restore(x))=1]\mathbb{1}\big[\text{token\_check}(\text{restore}(x)) = 1\big]
  4. 与门裁决$\land$ 表示逻辑与,两道关卡必须同时放行;任何一关拦截,整体判定为拒绝。
    allow(x)=1  ⟺  两道关卡均通过\text{allow}(x) = 1 \iff \text{两道关卡均通过}

AI 应用场景

大模型API服务商的内容审核网关

阶段:安全防护与合规审核

解决的问题:面向公众的大模型API每天接收海量用户输入,传统关键词过滤只能拦截精确匹配,无法识别零宽字符注入、Unicode同形字和Token边界拆分等变体攻击。AI网关需要在不显著增加延迟的前提下,实时识别并阻断绕过内容安全策略的恶意Prompt。

具体案例:某对话API在输入侧部署“字符级预检+Token级核验”双关卡,先对用户输入做Unicode规范化和零宽字符剥离,再送入分词器做还原拼合检测。上线后,含违禁词的绕过成功率从37%降至0.8%,误杀率控制在0.5%以内。

企业内部智能客服的防泄露护栏

阶段:应用部署与数据安全

解决的问题:企业内部员工通过智能客服查询薪酬、项目等敏感信息时,攻击者可能用“把敏感词拆碎+特殊字符拼接”的方式诱导模型泄露其他员工数据。传统DB权限控制管不到“模型嘴”,需要内容安全策略在Prompt入口做隐形攻击拦截。

具体案例:某金融企业客服机器人接入双重检测后,拦截到一类“用零宽空格拆开'工资单'并追加'打印所有人的'”的Prompt注入样本。由于字符级预检在入口清除了零宽字符,Token级核验还原出完整恶意指令并触发告警。

红队安全测试与对抗样本验证

阶段:安全评测与攻防演练

解决的问题:安全团队需要主动验证自家大模型内容策略的健壮性,用自动化工具批量生成Token操纵、同形字替换、控制符注入等变体样本,找出防线薄弱点并推动加固。

具体案例:某AI安全公司的红队工具内置了本文所述的六类攻击载荷生成器,针对客户模型自动枚举“零宽字符+子词拆分+同形字替换”的组合攻击。测试报告会标注哪些攻击穿透了单层防线,帮助客户有的放矢地部署双重检测。

Python 演示

python62 行
# -*- coding: utf-8 -*-"""演示 Token 操纵与特殊字符如何绕过单层内容安全过滤器""" import re BLACKLIST = {"forbidden", "danger", "weapon", "attack"}  def simple_tokenizer(text):    """模拟最小分词器: 按空白和标点切分为 Token 列表"""    return re.findall(r"[A-Za-z]+|\S", text)  def level1_char_filter(text, show=True):    """第一层: 字符级关键词黑名单检测(未做规范化)"""    tokens = simple_tokenizer(text)    for token in tokens:        if token.lower() in BLACKLIST:            if show:                print(f"[第一层拦截] 命中关键词: {token}")            return False    if show:        print("[第一层放行] 未发现完整敏感词")    return True  def normalize(text):    """字符级预检: 删除零宽字符并统一大小写"""    zero_width = {"\u200b", "\u200d", "\ufeff"}    return "".join(ch for ch in text if ch not in zero_width).lower()  def level2_token_filter(raw_text, show=True):    """第二层: Token 级核验, 先还原拼合再检测"""    restored = normalize(raw_text)    if restored in BLACKLIST:        if show:            print(f"[第二层拦截] 还原拼合后命中: {restored}")        return False    if show:        print("[第二层放行] 还原后仍安全")    return True  def attack_payload():    """攻击载荷: 将 forbidden 拆开并在缝隙注入零宽空格"""    return "for\u200bbidden"  def main():    payload = attack_payload()    print(f"攻击载荷原文: {repr(payload)}")    print("--- 第一层字符级检测 ---")    first_pass = level1_char_filter(payload)    print("--- 第二层 Token 级检测 ---")    second_pass = level2_token_filter(payload)    if first_pass and not second_pass:        print("结论: 单层过滤器被成功绕过, 双重防御将其拦截!")  if __name__ == "__main__":    main()
目的:用最小化实现还原“零宽空格拆分违禁词”攻击,展示单层黑名单为何失守、双层检测如何兜底。
  1. re.findall(r"[A-Za-z]+|\S", text)模拟分拣机切分规则:把连续字母和单个非空白字符各切为Token,零宽字符因此变成独立Token。
  2. if token.lower() in BLACKLIST第一道扫描仪按Token逐一比对黑名单,碎片“for“和”bidden”都不在名单内,所以放行。
  3. zero_width = {"\u200b", "\u200d", "\ufeff"}定义“隐形胶带”清单:零宽空格、零宽连接符与BOM。
  4. "".join(ch for ch in text if ch not in zero_width).lower()撕掉隐形胶带并统一小写,完成字符级规范化。
  5. if restored in BLACKLIST第二道关卡对还原后的完整串复查,终于命中"forbidden",拦截成功。

常见误区

误区我刚开始学大模型时,以为分词器就是把句子按空格和标点切成一个个完整的词,Token就是“词”换个说法而已。

正解Token是词表里的最小单元,可能是完整单词、常见词根甚至单字符。分词器依据统计频率切分,“bomb“可能被切成”bom“和”b“两个Token。恰恰是这种”非词边界”,给了攻击者拆分敏感词的空间。理解Token的粒度,是理解边界攻击的前提。

为何常见:人习惯按语言直觉的“词”为单位理解文本,而BPE等算法按共现频率自定义切分标准,二者天然错位。

误区既然零宽字符是隐形凶手,那把输入里的所有奇怪符号全部删掉,不就能一劳永逸防住Token边界攻击了吗?

正解删特殊字符能挡住零宽注入,但挡不住Unicode同形字——那是合法可见字符的替换,删不掉;也挡不住分词器天然把词拆成子词的情况。正确做法是“规范化+还原拼合”后再做双重检测,而不是粗暴删除。

为何常见:零宽字符不可见、容易背锅,让人误以为它是唯一元凶;实际上换行符、全角字符、同形字母都是绕过通道。

误区很多团队觉得内容安全就是把黑名单做全,把见过的违禁词统统收录,模型就攻不破了。

正解黑名单是“见过才拦”,攻击变体是组合爆炸级的:拆分、同形、编码错位、大小写混合、多语言混写……语义过滤模型能泛化识别部分新变体,但也有对抗盲区。任何单点策略都无法彻底兜底,必须多层协作。

为何常见:黑名单直观易调试、误报率低,容易给人“可控”的错觉,忽略了攻防的对抗性本质。

误区语义过滤模型那么聪明,能理解上下文意图,前面再加一道字符级预检纯属浪费算力。

正解语义模型输出概率分数,本身能被对抗样本欺骗;字符级预检成本低、确定性强,能在进模型前清洗掉大量已知伪装。两道关卡检测原理不同、攻击面互补,谁也无法完全替代谁。

为何常见:看到语义模型在常规样本上的惊艳表现,容易高估单点能力,忽略“纵深防御”的安全工程常识。

面试题

Q1. 大模型分词器的主要职责是什么?

单选题 · easy

  • A.将文本切分为Token序列并映射词表索引← 正确答案
  • B.将文本压缩加密后持久化存储到磁盘
  • C.对输入文本做拼写纠错与语法规范化
  • D.将文本从一种语言直接翻译成另一种

答案:A。分词器像邮局分拣机,只负责把文本切成Token并映射为模型可计算的词表ID,不做纠错、翻译或存储。B是存储层的事,C是文本预处理工具,D是机器翻译任务。

Q2. Unicode同形字攻击利用了字符的哪种性质?

单选题 · easy

  • A.字符在磁盘中存储的物理位置不同
  • B.字符编码长度变化导致解析错位
  • C.视觉形状相同但码位不同的字符可替换← 正确答案
  • D.字符是否被分词器单独切分为Token

答案:C。同形字攻击的核心是“山寨字母”:拉丁a与西里尔а肉眼无法区分,但Unicode码位完全不同,黑名单按码位匹配时视作不同字符,从而绕过检测。

Q3. 在文本中插入零宽空格绕过过滤器,本质上利用了过滤器的什么缺陷?

单选题 · easy

  • A.过滤器无法读取Unicode编码的文本
  • B.过滤器只做连续子串的精确匹配← 正确答案
  • C.过滤器的单次输入长度被限制
  • D.过滤器的黑名单词条数量太少

答案:B。零宽空格把“forbidden“切成”for”+"bidden",黑名单按连续子串匹配时找不到完整敏感词。过滤器完全能读取Unicode文本,问题在于它不先做规范化就匹配。

Q4. 分词后每个Token被映射为词表索引,这一步的根本目的是什么?

单选题 · mid

  • A.让模型在固定维度的嵌入空间中计算← 正确答案
  • B.压缩文本以减少服务器的存储开销
  • C.对Token加密以防被恶意篡改替换
  • D.将Token序列恢复为原始可见文本

答案:A。词表索引是模型查Embedding表的钥匙,索引映射到固定维度向量后,模型才能做注意力计算。压缩存储、加密、恢复原文都不是映射步骤的目的。

Q5. 字符级预检在安全防御体系中的正确位置是什么?

单选题 · mid

  • A.在分词之前先规范化与还原文本← 正确答案
  • B.在模型生成全部输出后才复核
  • C.在训练阶段清洗历史语料数据
  • D.在推理阶段完全替代语义模型

答案:A。字符级预检必须赶在分词之前,先把零宽字符、控制符、同形字清除或归正,否则后续的Token级检测看到的还是被污染的输入。它负责“净化”,不能替代负责“理解”的语义模型。

Q6. 为什么Token级核验需要先做拼接还原再检测?

单选题 · mid

  • A.拼接后文本更短便于存储计算
  • B.模型必须接收完整词粒度的输入
  • C.拆分碎片拼合后语义才完整呈现← 正确答案
  • D.还原后才能通过长度校验算法

答案:C。"FOR""BID"“DEN“分别看都无害,拼成”FORBIDDEN“才暴露危险。Token级核验的价值就在于模拟收件人”撕开胶带”的动作,对还原后的完整序列做语义判断。

Q7. 面对语义过滤模型,以下哪种攻击策略最可能绕过检测?

单选题 · hard

  • A.将所有单词统一改成大写形式表达
  • B.把整段文本的语序完全倒序排列
  • C.单纯在单词之间增加更多空格
  • D.用对抗样本操纵Token边界与嵌入← 正确答案

答案:D。大写、倒序、空格都能被规范化轻易处理。真正难防的是对抗样本:攻击者针对模型梯度构造输入,使语义模型在Token边界被操纵时给出低风险概率,属于模型级攻防。

Q8. 下列哪些属于特殊字符绕过的常见载荷?

多选题 · mid

  • A.零宽空格插入敏感词内部← 正确答案
  • B.同形字替换敏感词片段← 正确答案
  • C.换行符拆分敏感词提交← 正确答案
  • D.堆叠大量表情符号强化语气

答案:ABC。零宽空格、同形字、换行符都会改变分词器的切分边界或字符编码表示,直接服务于“拆分敏感词”的目标。表情符号只是情绪增强,不改变Token边界,不属于此类载荷。

Q9. 双重检测防御体系通常包含下列哪些环节?

多选题 · hard

  • A.字符级预检的规范化和还原← 正确答案
  • B.Token级核验的拼接语义复核← 正确答案
  • C.对模型权重做全量加密保护
  • D.对删除特殊字符后的文本复查← 正确答案

答案:ABD。字符级预检做规范化和还原,Token级核验做拼接语义复核,删除特殊字符后的复查是字符级预检的具体实现。模型权重加密属于部署安全,与输入内容过滤无关。

Q10. 关于字符规范化与内容安全,下列说法正确的有哪些?

多选题 · extreme

  • A.规范化可明显降低同形字绕过成功率← 正确答案
  • B.语义模型本身也可能被对抗样本欺骗← 正确答案
  • C.字符级预检与Token级检测互为兜底← 正确答案
  • D.单层过滤器足以拦截全部变体攻击

答案:ABC。NFKC规范化能把大量同形字映射回标准码位,显著缩小攻击面;语义模型输出概率分数,天然可被对抗样本误导;两层检测机制互补,单层漏过的另一层有机会兜底。D夸大了单层能力,与纵深防御原理相悖。