算力消耗规则
1. 登录 Web 应用防火墙控制台,在左侧导航栏,选择大模型安全 > 算力消耗规则。
2. 在算力消耗规则页签,单击添加规则。
3. 在添加算力消耗防护规则窗口中,进行信息配置:

参数说明
字段名称 | 说明 |
规则名称 | 设置规则名称。 |
会话标识 | 选择您此前配置的会话标识,用于区分不同用户,实现对单个用户的精准算力消耗检测。 |
默认需要选择 LLM 业务匹配方式,选择您添加的 LLM 业务防护路径配置。 说明: 单条规则中不同匹配方式为 “与” 关系。 | |
防护规则 | 基于请求频次的防护:统计单个用户 ID 在单位时间(1 分钟、5 分钟、10 分钟、30 分钟、60 分钟、6 小时、12 小时、24 小时、每整点小时、每自然天,值为 2-100000,值必须为整数)内的请求次数。 基于 Token 消耗量的防护:根据业务类型配置单个用户 ID在单位时间(1 分钟、5 分钟、10 分钟、30 分钟、60 分钟、6 小时、12 小时、24 小时、每整点小时、每自然天)内的总 Token 消耗量。负载均衡型 WAF 接入的域名暂不支持此功能。 |
执行动作 | WAF 支持针对算力超量用户实现两种处置方式: 观察:仅记录日志。 拦截 当您选择类型为基于请求频次的防护:在检测到用户超量后,将阻断用户发往源站的请求,并返回 WAF 默认拦截提示页面,您可以前往基础安全修改默认拦截提示页面的内容。 当您选择类型为基于 Token 消耗量防护:在检测到用户超量后,WAF 会中断源站返回给用户的请求,并在返回的 data 中插入自定义提示内容,您可以配置返回给用户的提示内容。 WAF 拦截时,如果是请求拦截,返回 WAF 默认拦截提示页面,您可以前往基础安全修改默认拦截提示页面的内容。如果是响应拦截,除了会在返回的 data 中插入自定义提示内容配置以外,还会在返回的 data 数据中插入一个 uuid 字段以及 uuid 值,为了更好的拦截体验,您也可以对业务前端进行逻辑修改,在检测到返回字段中存在 uuid 字段时,调整实际拦截效果。 |
优先级 | 配置规则优先级。优先级逻辑:请输入1-100的整数,数字越小,代表这条规则的执行优先级越高;相同优先级下,更新时间越晚,优先级越高。 |
匹配方式
参数类型 | 支持逻辑符号 | 说明 |
请求Header参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 可设置多个匹配值(通过换行分隔),用于识别特定请求头的特征值。 |
GET参数值 | 内容为空、存在、不存在、包含、不包含 | 支持对GET请求参数值的空值、存在性及内容特征匹配。 |
POST参数值 | 内容为空、存在、不存在、包含、不包含 | 支持对POST请求参数值的空值、存在性及内容特征匹配。 |
Cookie参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 支持对Cookie值的空值、存在性、内容特征及前后缀规则匹配。 |
Referer参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 支持对来源链接(Referer)的空值、存在性、内容特征及前后缀规则匹配。 |
访问源IP | 属于、不属于 | 支持对客户端 IP 地址的归属范围匹配(需填写具体 IP 段或地址)。 |
IP 归属地 | 属于、不属于 | 支持对 IP 地址所属地域的匹配(可选择国内/国外具体地区,支持多地区组合配置)。 |
会话ID | 属于、不属于 | 支持对会话ID的归属范围匹配(需填写具体会话ID或通过换行分隔多个ID)。 |
User-Agent | 属于、不属于 | 支持对用户代理(User-Agent)的归属范围匹配(需填写具体UA标识或通过换行分隔多个标识)。 |
为帮助您优化拦截体验,为用户提供更好的交互体验,以下提供业务前端针对 LLM-WAF 拦截逻辑修改的示例代码,该示例代码基于 Deepseek 接口格式,可参考嵌入您的业务前端代码中,实现与 LLM-WAF 的防护逻辑联动:
拦截机制说明:
请求方向拦截:LLM-WAF 对于请求方向的拦截方式为同步拦截,客户端发送请求后,服务器立即检查风险(如敏感词)。若触发拦截,直接返回 LLM-WAF 预设的拦截页面(不会使用规则中的自定义拦截提示内容),如您的业务前端需处理拦截效果,您只需调整业务前端对于响应状态码和状态提示的效果。
响应方向拦截:LLM-WAF 对于响应方向的拦截方式为异步拦截,服务器在流式输出内容时,LLM-WAF 同步实时检测风险。若触发拦截时:
1.1 LLM-WAF 会中断流式内容输出。
1.2 在响应数据中添加 uuid 字段,并在您定义的响应内容字段中,插入您规则配置的自定义拦截提示内容。
1.3 如您的业务前端需处理拦截效果,您可以通过检测 uuid 字段的存在性,判断拦截状态,并调整业务前端的拦截效果:
若未识别到 uuid 字段:正常展示内容。
若识别到 uuid 字段:可以清空已输出内容,重置显示为 LLM-WAF 插入的自定义提示内容。
请求方向拦截
默认拦截提示页面处理,效果为展示拦截提示的内容到聊天窗口,示例代码如下
if (!initResponse.ok) {const errorText = await initResponse.text();console.error('API错误响应:', errorText);removeMessage(responseMessageId); // 移除正在显示的消息容器// 解析服务器返回的错误信息let errorMessage = '';try {const errorData = JSON.parse(errorText);errorMessage = errorData.error?.message || errorData.message || errorText;} catch (e) {errorMessage = errorText;}// 显示错误消息到聊天界面addMessage(errorMessage, 'error');updateStatus('请求失败', 'error');return;}
响应方向拦截
data 数据中插入自定义提示内容、uuid 字段的替换和展示处理,效果为重置掉当前已返回的内容,并展示自定义提示内容,示例代码如下:
/ UUID检测处理 - 基于您的代码逻辑if (parsed.uuid) {console.log('🚨 检测到内容替换信号!');console.log('原始数据:', parsed);console.log('替换前内容:', fullContent);// 从服务器返回的数据中提取新内容let newContent = '';if (parsed.choices && parsed.choices[0] && parsed.choices[0].delta && parsed.choices[0].delta.content) {newContent = parsed.choices[0].delta.content;console.log('✅ 从 choices[0].delta.content 获取内容:', newContent);} else if (parsed.content) {newContent = parsed.content;console.log('✅ 从 content 获取内容:', newContent);} else {console.log('⚠️ 在数据中找不到 content');}// 完全重置已显示的内容fullContent = newContent;reasoning = '';contentWasReplaced = true;// 清空当前显示内容并重新显示服务器返回的新内容if (selectedModel === 'deepseek-reasoner') {// R1模式:清空思考过程和答案,显示新内容clearR1Message(responseMessageId);updateR1StreamingMessage(responseMessageId, '', fullContent, false);addContentReplacedIndicator(responseMessageId);} else {// 普通模式:清空消息,显示新内容clearStreamingMessage(responseMessageId);updateStreamingMessage(responseMessageId, fullContent, true);addContentReplacedIndicator(responseMessageId);}console.log('✅ 内容替换完成,当前 fullContent:', `"${fullContent}"`);// 停止处理后续数据流shouldStopProcessing = true;console.log('🛑 设置停止处理标记,不再处理后续数据');}
4. 完成上述所有参数设置后,请仔细检查,确认无误后,打开规则开关,单击确定提交配置,该规则即刻生效,开始守护您的算力资源。
内容安全防护规则
1. 登录 Web 应用防火墙控制台,在左侧导航栏,选择大模型安全 > 内容安全防护规则。
2. 在内容安全防护规则页面,单击添加规则。
3. 在添加内容安全防护规则窗口中,进行信息配置:

参数说明
字段名称 | 说明 |
规则名称 | 设置规则名称。 |
会话标识 | 选择您此前配置的会话标识,用于区分不同用户,实现对单个用户的精准内容安全检测。 |
匹配方式 | 默认需要选择 LLM 业务匹配方式,选择您添加的 LLM 业务防护路径配置。 说明: 单条规则中不同匹配方式为 “与” 关系。 |
检测模式 | 同时检测输入与输出:同时对输入和输出内容进行检测。 仅检测输入内容:对大模型防护路径中定义的提示词部分内容进行检测。 仅检测输出内容:对大模型防护路径中定义的思考与输出部分内容进行检测。如果模型为推理模型,则输出内容的检测范围同时包括思考内容与回答内容。负载均衡型 WAF 接入的域名暂不支持此功能。 |
检测内容 | 可自选多个条件之间的运算逻辑。 与(默认) 或 |
| 数据分类:支持身份证号、社保卡号、URL 地址等 30 余类敏感信息识别检测。 涉敏信息:支持识别色情等违法类型的信息。 关键词:支持识别关键词信息,最大支持配置 20 个关键词,多个关键词为或关系。请留意,对于输出内容的检测,由于大模型输出为流式输出,WAF 检测时对于长文本会进行组合检测,因此如果您配置的关键词过长,检测有可能会无法命中,建议单个关键词长度配置在 10 个字符以内。 提示词注入:支持识别提示词注入攻击行为。注意,选择此内容配置时,仅支持对输入部分信息进行检测。 正则表达式:支持正则匹配。回车分隔多个值,最多输入20个,单个最多120字符。 编码类型识别:支持检测输入或输出中是否包含特定编码类型的内容。支持以下几种编码类型:Base64、URL/Percent 编码、Punycode、Hex 编码、乱码。支持多选,多个编码类型之间为"或"关系,即命中任意一种即触发规则。 说明: 推荐防护架构为:优先防护提示词注入攻击,其次是涉敏信息保护,最后是数据分类保护、自定义关键词保护、正则匹配和编码类型识别,推荐您至少配置三条内容安全防护规则。 |
执行动作 | 观察:仅记录日志。 拦截 对于输入内容,大模型安全模块进行同步检测,当在输入内容中检测到风险时,将阻断用户发往源站的请求,并返回 WAF 默认拦截提示页面,您可以前往基础安全修改默认拦截提示页面的内容。 对于输出内容,大模型安全模块进行异步检测,当在输出内容中检测到风险时,将停止内容输出,并插入自定义提示内容,您可以配置返回给用户的提示内容。 具体逻辑为:在识别到风险后,会停止流式输出,并在最后一次返回的 data 数据中的对应响应字段位置插入自定义提示内容,及一个 uuid 字段以及 uuid 值,为了更好的拦截体验,您也可以对业务前端进行逻辑修改,在检测到返回字段中存在 uuid 字段时,调整实际拦截效果。 |
优先级 | 配置规则优先级。 优先级逻辑:请输入1-100的整数,数字越小,代表这条规则的执行优先级越高;相同优先级下,更新时间越晚,优先级越高。 |
匹配方式
参数类型 | 支持逻辑符号 | 说明 |
请求Header参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 可设置多个匹配值(通过换行分隔),用于识别特定请求头的特征值。 |
GET参数值 | 内容为空、存在、不存在、包含、不包含 | 支持对GET请求参数值的空值、存在性及内容特征匹配。 |
POST参数值 | 内容为空、存在、不存在、包含、不包含 | 支持对POST请求参数值的空值、存在性及内容特征匹配。 |
COOKIE参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 支持对Cookie值的空值、存在性、内容特征及前后缀规则匹配。 |
Referer参数值 | 内容为空、存在、不存在、包含、不包含、属于、不属于、前缀匹配、后缀匹配 | 支持对来源链接(Referer)的空值、存在性、内容特征及前后缀规则匹配。 |
访问源IP | 属于、不属于 | 支持对客户端IP地址的归属范围匹配(需填写具体IP段或地址)。 |
IP归属地 | 属于、不属于 | 支持对IP地址所属地域的匹配(可选择国内/国外具体地区,支持多地区组合配置)。 |
会话ID | 属于、不属于 | 支持对会话ID的归属范围匹配(需填写具体会话ID或通过换行分隔多个ID)。 |
User-Agent | 属于、不属于 | 支持对用户代理(User-Agent)的归属范围匹配(需填写具体UA标识或通过换行分隔多个标识)。 |
为帮助您优化拦截体验,为用户提供更好的交互体验,以下提供业务前端针对 LLM-WAF 拦截逻辑修改的示例代码,该示例代码基于 Deepseek 接口格式,可参考嵌入您的业务前端代码中,实现与 LLM-WAF 的防护逻辑联动:
拦截机制说明:
请求方向拦截:LLM-WAF 对于请求方向的拦截方式为同步拦截,客户端发送请求后,服务器立即检查风险(如敏感词)。若触发拦截,直接返回 LLM-WAF 预设的拦截页面(不会使用规则中的自定义拦截提示内容),如您的业务前端需处理拦截效果,您只需调整业务前端对于响应状态码和状态提示的效果。
响应方向拦截:LLM-WAF 对于响应方向的拦截方式为异步拦截,服务器在流式输出内容时,LLM-WAF 同步实时检测风险。若触发拦截时:
1.1 LLM-WAF 会中断流式内容输出。
1.2 在响应数据中添加 uuid 字段,并在您定义的响应内容字段中,插入您规则配置的自定义拦截提示内容。
1.3 如您的业务前端需处理拦截效果,您可以通过检测 uuid 字段的存在性,判断拦截状态,并调整业务前端的拦截效果:
若未识别到 uuid 字段:正常展示内容。
若识别到 uuid 字段:可以清空已输出内容,重置显示为 LLM-WAF 插入的自定义提示内容。
请求方向拦截
默认拦截提示页面处理,效果为展示拦截提示的内容到聊天窗口,示例代码如下:
if (!initResponse.ok) {const errorText = await initResponse.text();console.error('API错误响应:', errorText);removeMessage(responseMessageId); // 移除正在显示的消息容器// 解析服务器返回的错误信息let errorMessage = '';try {const errorData = JSON.parse(errorText);errorMessage = errorData.error?.message || errorData.message || errorText;} catch (e) {errorMessage = errorText;}// 显示错误消息到聊天界面addMessage(errorMessage, 'error');updateStatus('请求失败', 'error');return;}
响应方向拦截
data 数据中插入自定义提示内容、uuid 字段的替换和展示处理,效果为重置掉当前已返回的内容,并展示自定义提示内容,示例代码如下:
/ UUID检测处理 - 基于您的代码逻辑if (parsed.uuid) {console.log('🚨 检测到内容替换信号!');console.log('原始数据:', parsed);console.log('替换前内容:', fullContent);// 从服务器返回的数据中提取新内容let newContent = '';if (parsed.choices && parsed.choices[0] && parsed.choices[0].delta && parsed.choices[0].delta.content) {newContent = parsed.choices[0].delta.content;console.log('✅ 从 choices[0].delta.content 获取内容:', newContent);} else if (parsed.content) {newContent = parsed.content;console.log('✅ 从 content 获取内容:', newContent);} else {console.log('⚠️ 在数据中找不到 content');}// 完全重置已显示的内容fullContent = newContent;reasoning = '';contentWasReplaced = true;// 清空当前显示内容并重新显示服务器返回的新内容if (selectedModel === 'deepseek-reasoner') {// R1模式:清空思考过程和答案,显示新内容clearR1Message(responseMessageId);updateR1StreamingMessage(responseMessageId, '', fullContent, false);addContentReplacedIndicator(responseMessageId);} else {// 普通模式:清空消息,显示新内容clearStreamingMessage(responseMessageId);updateStreamingMessage(responseMessageId, fullContent, true);addContentReplacedIndicator(responseMessageId);}console.log('✅ 内容替换完成,当前 fullContent:', `"${fullContent}"`);// 停止处理后续数据流shouldStopProcessing = true;console.log('🛑 设置停止处理标记,不再处理后续数据');}
4. 完成上述所有参数设置后,打开规则开关,然后单击确定提交配置,该规则即刻生效,开始守护您的大模型内容安全。
攻击日志记录
当上述规则拦截到相关异常情况后,需要查看攻击日志获取详细信息。
1. 登录 Web 应用防火墙控制台,在左侧导航栏,选择攻击日志 > 日志服务。
2. 检索攻击日志前,请先设置检索的范围。选择实例和域名,设置时间范围,单击 
。


3. 选择交互模式,攻击类型选择大模型安全,单击确定。

4. 在攻击记录列表中,单击某一条攻击记录,可以查看详细信息。其中内容包含:拦截的用户提示词、攻击类型、请求来源 IP、具体的攻击内容等详细信息。例如,在提示词攻击场景下,能清晰看到用户输入的诱导性提示词原文。

5. 后续处置:根据日志呈现的详细信息,深入分析攻击类型和来源。
若发现是由于规则配置不够完善导致部分攻击未被有效拦截,可返回登录 Web 应用防火墙控制台,选择大模型安全 > 内容安全防护规则 页面,对相应规则进行调整优化,如补充关键词、调整匹配方式等;
若判断是新出现的攻击手段,可考虑增加新的规则进行针对性防护。
场景配置示例
大模型防护路径配置示例
1. 根据您前端大模型的交互路径配置防护路径,您可以通过浏览器高级工具按 F12 键查看您业务前端对应的配置。例如,Demo 业务中对应请求、响应和Token 用量的字段分别如下:
请求

响应

Token 消耗量:为单字段总消耗量。

2. 在 大模型安全页面,单击大模型防护路径设置,则我们对应的大模型防护路径配置如下:

字段名称 | 说明 |
提示词位置 | 配置值为 messages|@reverse|0.content。含义为请求负载中 messages 数组最新一个元素中(倒序)的 content 字段的值。 |
响应位置 | 配置值为 choices.0.delta.content。含义为响应 data 中 choices 数组的第一个元素 delta 对象内中 content 字段的值。 |
Token 用量位置 | 配置值为 usage.total_tokens。含义为用 usage对象中total_tokens 字段的值作为 Token 消耗量的计算值。 |
算力消耗防护场景示例
1. 参考 大模型业务接入,接入大模型业务并完成会话标识、大模型防护路径配置。
2. 登录 Web 应用防火墙控制台,在左侧导航栏,选择大模型安全 > 算力消耗规则。
3. 在算力消耗规则页面,单击添加规则,配置一条高频请求拦截示例规则,设置为 1 分钟请求超过 1 万 Token,超出后拦截,并返回自定义提示词,单击确定。

字段名称 | 说明 |
防护规则 | 配置基于 token 消耗量防护,并配置检测值为 1 万 Token 每分钟。 |
执行动作 | 拦截。 |
拦截提示使用自定义提示 | 您好,您最近 1 分钟使用的 Token 量较高,请稍等一段时间再使用。 |
优先级 | 1。 |
规则开关 | 开启。 |
4. 在您的大模型业务侧,请求大模型输出 2 篇 3000 字的文章,即可触发算力消耗拦截,并在用户侧返回拦截提示语。如果您的大模型输出速率较慢,也可以调整为 5 分钟请求超过 1 万 Token,实现更快捷的场景验证。

内容安全防护规则场景示例
1. 参考 大模型业务接入,接入大模型业务并完成会话标识、大模型防护路径配置。
2. 登录 Web 应用防火墙控制台,在左侧导航栏,选择大模型安全 > 内容安全防护规则。
3. 在内容安全防护规则页面,单击添加规则,配置一条内容安全防护规则,您可以参考进行如下配置:

字段名称 | 说明 |
设置检测模式 | 输入输出均检测。 |
执行动作 | 信息类型:关键词。 匹配内容:12345、abcd。 |
执行动作 | 拦截。 |
拦截提示 | 自定义提示,并配置内容为:自定义提示拦截测试验证。 |
优先级 | 1。 |
规则开关 | 开启。 |
4. 前往您的大模型业务前端,先输入提问:按顺序连着输出前五个正整数,然后观察拦截情况。我们可以观察到,输入内容中存在关键词12345时,输入会被拦截并返回配置的拦截提示页面内容。

5. 然后继续输入提问:按顺序连着输出前四个小写英文字母,然后观察拦截情况。我们可以观察到,输出内容中存在关键词abcd时,输出会被拦截并返回配置的代答内容。

6. 您也可以前往攻击日志 > 大模型安全日志,查看对应的攻击日志信息。
