搜索文档

输入关键词,回车打开结果

基于 AST 抽象语法树与正则双重引擎的软著源代码自动截取与脱敏系统设计

在计算机软件著作权登记申报时,版权保护中心要求提交代表软件核心功能的前 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.tsapp.py)往后截取 30 页,并挑选配置或非核心工具模块向前截取 30 页。 生成的源代码会写入 Word 报表中,自动套用版权中心要求的格式:宋体小五号字、单倍行距、带行号且每页刚好 50 行,实现 100% 格式无缝对接。

准备好体验全能智能体了吗?

下载 OmniAgent 社区版,体验真正的本地 AI 自动化。数据安全、永久免费。