# 《WaLiAPI - 本地 LLM API 网关》第2-3节:安全规则与数据脱敏

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

上一节我们构建了安全审计引擎,但规则是硬编码在 Rust 代码里的。这一节我们做两件事:把规则数据化(内置规则入库 + 用户自定义黑白名单),以及实现真正的数据脱敏(把密钥从请求体中抹掉再转发)。

# 一、本章诉求

  1. 设计规则表结构(内置规则 + 自定义规则)
  2. 实现 25 条内置规则的种子数据机制
  3. 实现自定义黑白名单规则(域名/工具/路径/关键词)
  4. 实现递归 JSON 脱敏算法
  5. 实现规则管理的 Tauri 命令

# 二、规则数据化设计

# 2.1 为什么要规则入库?

硬编码规则的问题:

  • 用户想关闭某条误报规则 → 只能改代码重新编译
  • 用户想加一条公司内部域名白名单 → 无法实现
  • 规则要调整严重级别 → 无法配置

规则入库后:内置规则可编辑(改严重度、开关),自定义规则可增删。这就是"策略与机制分离"——扫描引擎是机制(代码),检测什么是策略(数据)。

# 2.2 表结构设计

src-tauri/migrations/004_security_rules.sql

-- 内置安全规则(应用播种,用户可编辑)
CREATE TABLE IF NOT EXISTS security_builtin_rules (
    id          TEXT PRIMARY KEY,
    rule_id     TEXT NOT NULL UNIQUE,   -- 如 credential.secret_token
    category    TEXT NOT NULL,          -- credential | file | unicode | network | tool | prompt
    severity    TEXT NOT NULL DEFAULT 'medium',
    title       TEXT NOT NULL,
    description TEXT,
    toggle_key  TEXT,                   -- 关联的设置开关,如 security.scan_unicode
    enabled     INTEGER NOT NULL DEFAULT 1,
    created_at  TEXT NOT NULL
);

-- 自定义规则(用户黑白名单)
CREATE TABLE IF NOT EXISTS security_custom_rules (
    id          TEXT PRIMARY KEY,
    rule_type   TEXT NOT NULL,          -- blacklist | whitelist
    category    TEXT NOT NULL,          -- domain | tool | path | keyword
    pattern     TEXT NOT NULL,          -- 匹配内容(子串匹配)
    severity    TEXT NOT NULL DEFAULT 'medium',
    action      TEXT NOT NULL DEFAULT 'warn',
    enabled     INTEGER NOT NULL DEFAULT 1,
    description TEXT,
    created_at  TEXT NOT NULL
);

CREATE INDEX IF NOT EXISTS idx_builtin_rules_enabled ON security_builtin_rules(enabled);
CREATE INDEX IF NOT EXISTS idx_custom_rules_type ON security_custom_rules(rule_type);
-- ... 其余索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

字段设计说明

  • toggle_key:内置规则与全局开关的关联。比如所有 Unicode 类规则都受 security.scan_unicode 总开关控制——两层开关(全局类别开关 + 单条规则开关)给用户细粒度控制
  • pattern 用子串匹配而非正则:对普通用户友好,性能也可控(正则可能遭遇 ReDoS)