欢迎光临
我们一直在努力

贴代码前先拦泄漏:规则扫描、图片 OCR 与有界 AI 复核

贴代码前先拦泄漏:规则扫描、图片 OCR 与有界 AI 复核,技术主题封面示意

一段配置能正常运行,和适合公开发布,是两件事。最常见的疏漏不需要多复杂的模型:复制示例时顺手带进了 token、数据库口令或截图中的认证头。预检的价值是尽早让作者停下来检查,而不是为内容盖一枚“绝对安全”的章。

10 月 22 日的 Decisions API 发布把有界输出推到开发者面前:可以从有限动作中选择,也可以给出概率或等级。这样的接口适合做复核路由,但概率不会自动变成秘密识别的真值。下面先建立一个可以在本地检查的文本基线,图片和 AI 复核的缺口单独标出来。

规则命中是线索,不是凭据鉴定

Gitleaks 的官方规则配置把正则、熵阈值和 allowlist 分开。这个区分值得保留:高熵内容可能是普通哈希,低熵口令仍可能是真实秘密;一个 token 前缀命中也不能证明凭据有效。

为避免把演示写成真实扫描器,本例只识别“疑似敏感字段赋值”,不验证凭据、不联网、不包含厂商真实密钥样例。输入超过 16,384 个 UTF-16 code unit 时进入人工复核,超限不能被当作没有发现。长度限制也不是任意正则安全的证明:复杂规则仍应单独审查,必要时隔离执行。

保存为 precheck.mjs。返回结果只保留行号和原因,避免扫描报告再次复制秘密。

export function entropy(s) {
if (!s.length) return 0;
const count=new Map();
for(const c of s)count.set(c,(count.get(c)??0)+1);
const n=[…s].length;
return […count.values()].reduce((h,v)=>h-(v/n)*Math.log2(v/n),0);
}
export function precheck(text) {
if(typeof text!=='string')throw Error('text required');
if(text.length>16384)return {state:'MANUAL',reason:'input_limit',findings:[]};
const findings=[];
const pattern=/\\b(?:api[_-]?key|access[_-]?token|password)\\s*[:=]\\s*["']?([A-Za-z0-9_+./=-]{4,256})/gi;
for(const [index,line] of text.split(/\\r?\\n/).entries()) {
for(const match of line.matchAll(pattern)) {
const value=match[1];
// 固定的文档占位值;不接受用户临时指定的豁免名单。
if(['EXAMPLE_ONLY','YOUR_VALUE_HERE'].includes(value))continue;
findings.push({line:index+1,reason:'sensitive_assignment',
highEntropy:entropy(value)>=3.5});
}
}
return {state:findings.length?'MANUAL':'NO_RULE_HIT',findings};
}
export function routeReview(decision) {
if(!decision || !['manual','reject'].includes(decision.action))
return 'manual';
return decision.action;
}

图片不能当成另一段字符串

文本、图片和复核链路示意

这张图是设计边界图:实线表示本文实现的文本规则逻辑,虚线 OCR 是尚未接入的组件。它不是已经运行的多模态系统。图片应先在明确授权的处理环境中提取文字,再保留截图位置与提取文本的对应关系;只扫描配文会漏掉图里的内容。

OCR 也有误识别、漏行和缩放问题。把一个高风险截图识别成空文本,正确动作应是“无法完成预检”,而不是返回通过。原图不宜因一次 OCR 结果就被丢弃;人工复查需要看到对应区域。日志中则应尽量保留位置和摘要,而不是整段识别出的秘密。

本文没有调用 OCR 或模型。routeReview 只演示有限动作的解析:未知动作、缺字段和解析失败都回到人工复核。即使模型返回很高的“安全概率”,也不能跨过服务端的发布授权。若发现真实凭据可能已外泄,清理文章文本还不够,应由有权限的人撤销或轮换凭据,不能指望删掉网页就恢复安全。

怎样评价这道预检

先用人工假样本做可解释检查:疑似口令、明确占位值、普通散列、无关代码和超限输入。预期结果不能由扫描器自己生成。再用经过授权的标注材料评价漏报与误报,并把图片 OCR、规则和 AI 路由的错误分开统计。

本例本地通过的只是这些构造样例及默认人工复核逻辑。NO_RULE_HIT 的含义是“这个有限规则集没有命中”,不是“内容安全”。没有真实标注集、OCR 结果或付费 API 调用,因此不报告准确率、召回率或审核延迟。

复现记录

本轮在 Node.js v26.3.0 中运行随文核心逻辑的构造样例,进程退出码为 0。测试输出:

PASS: dummy assignment, placeholder, hash counterexample, redacted result, size limit, unknown action

将上方 JavaScript 保存为 example.mjs,可用 node example.mjs 加载;浏览器、音频节点、摄像头及外部服务入口另需对应环境。构造样例不等于真实业务效果。

资料与时效

  • Build more responsive apps with the Decisions API:2026-10-22。
  • Gitleaks 项目代码库:首次发布日期未核实。

本稿对应原预排时段;实际发布前须人工复核来源更正、SDK/API 版本及可用性,不据此预言 10 月 24–31 日的新事件。

赞(0)
未经允许不得转载:171主机测评 » 贴代码前先拦泄漏:规则扫描、图片 OCR 与有界 AI 复核
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址