在计算机软件著作权登记申报时,版权保护中心要求提交代表软件核心功能的前 30 页和后 30 页源代码文档。
然而,企业往往在开发机代码中硬编码了部分测试用数据库连接串、阿里云 AccessKey 或 JWT 密钥。这如果被直接截取放入文档,极易引发重大数据泄露风险。
为此,我们开发了一套基于抽象语法树(AST)和正则表达式双重引擎的代码安全脱敏与规范化截取工具。
一、 敏感信息脱敏的局限与 AST 解决方案
如果只使用正则表达式(Regex)匹配密钥,极易误伤正常的字符串(如将包含 key 的正常业务参数也全部替换掉)。
我们的方案是在大模型推理和正则的基础之上,加入抽象语法树(AST)词法分析:
- AST 解析:将 TypeScript/JavaScript 或 Python 代码拆解为语法树。
- 变量赋值检测:精准识别所有的
VariableDeclarator。如果变量名包含Secret,Password,Token,ApiKey且其右侧是一个字面量(Literal),则对其值执行 MASK。
二、 Python 代码库敏感变量 AST 检测器实现
以下为基于 Python 内置 ast 模块的硬编码变量敏感信息自动检测代码:
import ast
class SensitiveVariableScanner(ast.NodeVisitor):
def __init__(self):
self.findings = []
self.sensitive_keywords = ["key", "secret", "password", "token", "pwd", "auth"]
def visit_Assign(self, node):
# 扫描所有的赋值语句 (如 DB_PASS = "123456")
for target in node.targets:
if isinstance(target, ast.Name):
var_name = target.id.lower()
# 检查变量名是否包含敏感关键字,且右侧为字符串字面量
if any(kw in var_name for kw in self.sensitive_keywords):
if isinstance(node.value, ast.Constant) and isinstance(node.value.value, str):
self.findings.append({
"variable_name": target.id,
"line_number": node.lineno,
"value": node.value.value
})
self.generic_visit(node)
def scan_file_for_secrets(file_path):
with open(file_path, "r", encoding="utf-8") as f:
source_code = f.read()
try:
tree = ast.parse(source_code)
scanner = SensitiveVariableScanner()
scanner.visit(tree)
return scanner.findings
except SyntaxError:
return [] # 语法错误,跳过三、 源代码文档生成与排版
在检测并脱敏后,工具会自动挑选程序的第一级入口文件(如 main.ts 或 app.py)往后截取 30 页,并挑选配置或非核心工具模块向前截取 30 页。
生成的源代码会写入 Word 报表中,自动套用版权中心要求的格式:宋体小五号字、单倍行距、带行号且每页刚好 50 行,实现 100% 格式无缝对接。