首页
/ 使用 SAST 插件构建多语言代码安全扫描体系:security-scanning/security-sast 实战指南

使用 SAST 插件构建多语言代码安全扫描体系:security-scanning/security-sast 实战指南

2026-09-09 19:45:19作者:曹令琨Iris

本文以 plugins/security-scanning/commands/security-sast.md 为主体,结合同插件下的 sast-configuration 技能security-auditor 等仓库资源,系统讲解如何在 Claude Code / Codex / Cursor 等 Agent 工作流中,为 Python、JavaScript/TypeScript、Java、Ruby、Go、Rust 等多语言代码库落地 SAST(静态应用安全测试):涵盖工具选型、规则配置、漏洞模式修复、统一扫描器实现、CI/CD 集成与最佳实践。

在本仓库的 Agent 插件体系中,security-scanning 插件承载了代码安全扫描、安全加固编排与威胁建模三大能力。其中 security-sast 命令是面向静态代码分析的专门入口,通过 /security-scanning:security-sast 即可直接调用(参见 docs/agents.md 中的命令注册示例)。读完本文,你将能够:按语言挑选并配置 Bandit / ESLint Security / Semgrep 等 SAST 工具,编写组织级自定义规则,识别并修复 SQL 注入、XSS、硬编码密钥等高频漏洞,并将扫描接入 GitHub Actions 与 GitLab CI。

一、SAST 插件能做什么:能力边界与适用场景

security-sast.md 在 Frontmatter 中声明了该命令的适用文件范围(globs)与关键词(keywords),这说明它在 Agent 场景中会被自动匹配到对应的代码扫描任务:当工作区中出现 **/*.py**/*.js**/*.ts**/*.java**/*.rb**/*.go**/*.rs**/*.php 等文件时,该命令即可被唤起。

其核心能力可分为四层:

  • 多语言 SAST 覆盖:Python、JavaScript/TypeScript、Java、Ruby、PHP、Go、Rust;
  • 工具生态集成:Bandit、Semgrep、ESLint Security、SonarQube、CodeQL、PMD、SpotBugs、Brakeman、gosec、cargo-clippy;
  • 漏洞模式检测:SQL 注入、XSS、硬编码密钥、路径遍历、IDOR、CSRF、不安全反序列化;
  • 框架感知分析:Django、Flask、React、Express、Spring Boot、Rails、Laravel。

在“何时使用”上,文档明确了适用场景:代码评审安全分析、注入类漏洞、硬编码密钥、框架特有模式、自定义安全策略强制、上线前校验、遗留代码评估,以及合规审计(OWASP、PCI-DSS、SOC2)。插件还提供了分工明确的配套工具——security-secrets.md 负责进阶凭据扫描、security-owasp.md 负责 Top 10 映射、security-api.md 负责 REST/GraphQL 端点测试(详见下文“协同工具矩阵”一节),避免单个命令职责过载。

二、按语言选择工具:从 Bandit 到 cargo-clippy

文档给出的选型思路是“语言优先”:每种主语言绑定一个最成熟的 SAST 工具,再以 Semgrep 作为跨语言兜底。

Python:Bandit

# 安装与扫描
pip install bandit
bandit -r . -f json -o bandit-report.json
bandit -r . -ll -ii -f json  # 仅 High/Critical

-ll 表示最低严重级别为 HIGH(-lll 为 CRITICAL),-ii 表示最低置信度为 HIGH,二者叠加用于快速聚焦高风险问题;-f json -o 将结果导出为机器可读报告,便于后续接入扫描器统一汇总。

配置文件 .bandit

exclude_dirs: ["/tests/", "/venv/", "/.tox/", "/build/"]
tests:
  [
    B201, B301, B302, B303, B304, B305, B307, B308, B312,
    B323, B324, B501, B502, B506, B602, B608,
  ]
skips: [B101]

配置要点:exclude_dirs 排除测试目录、虚拟环境与构建产物以提升信噪比;tests 白名单精确圈定要启用的检查器 ID——例如 B608(SQL 注入相关)、B301/B302/B303(Pickle/黑名单反序列化)、B323(不安全随机数)、B506(YAML 不安全加载)、B602(subprocess 与 shell)、B501/B502(requests 证书校验);skips: [B101]assert 使用(B101)整体放行,避免在测试代码中误报。

JavaScript/TypeScript:ESLint Security

npm install --save-dev eslint @eslint/plugin-security eslint-plugin-no-secrets
eslint . --ext .js,.jsx,.ts,.tsx --format json > eslint-security.json

配置文件 .eslintrc-security.json

{
  "plugins": ["@eslint/plugin-security", "eslint-plugin-no-secrets"],
  "extends": ["plugin:security/recommended"],
  "rules": {
    "security/detect-object-injection": "error",
    "security/detect-non-literal-fs-filename": "error",
    "security/detect-eval-with-expression": "error",
    "security/detect-pseudo-random-prng": "error",
    "no-secrets/no-secrets": "error"
  }
}

plugin:security/recommended 一键开启安全推荐规则集,再显式强化四条高危规则:对象属性注入(原型污染风险)、非字面量 fs 文件名(路径遍历)、eval 表达式执行、伪随机数 PRNG(安全上下文禁用 Math.random),并以 no-secrets 拦截代码中硬编码的秘密。注意该配置与仓库 tools/validate_generated.py 等生成物校验无关,它是面向 JS/TS 工程的独立规则集。

跨语言兜底:Semgrep

pip install semgrep
semgrep --config=auto --json --output=semgrep-report.json
semgrep --config=p/security-audit --json
semgrep --config=p/owasp-top-ten --json
semgrep ci --config=auto  # CI 模式

Semgrep 基于模式匹配与元变量(metavariable)实现语法级分析,支持 30+ 语言,且同一套 YAML 规则可同时作用于多语言。--config=auto 自动挑选公共规则集;p/security-auditp/owasp-top-ten 是社区维护的专项规则包;semgrep ci 则面向 CI 环境提供去重与增量结果。仓库中的 sast-configuration 技能 进一步给出了 semgrep --config=auto --error(命中即失败)以及 p/pci-dss(PCI-DSS 合规扫描)等用法。

其余语言工具速查

语言 命令 说明
Java mvn spotbugs:check SpotBugs 通过 Maven 插件执行字节码级缺陷分析
Ruby brakeman -o report.json -f json Rails 专用安全扫描器,输出 JSON 报告
Go gosec -fmt=json -out=gosec.json ./... 检查 Go 源码的常见安全问题
Rust cargo clippy -- -W clippy::unwrap_used 以 lint 警告形式暴露 unwrap 等风险模式

三、编写 Semgrep 自定义规则:组织级安全策略落地

security-sast.md 将“自定义规则编写”列为插件核心能力之一。SAST 工具出厂规则覆盖通用漏洞,但每个组织的框架约定、敏感 API、内部组件各不相同,必须通过自定义规则把安全策略固化为代码。配置文件为 .semgrep.yml,文档给出了五个可直接复用的示例规则:

rules:
  - id: sql-injection-format-string
    pattern: cursor.execute("... %s ..." % $VAR)
    message: SQL injection via string formatting
    severity: ERROR
    languages: [python]
    metadata:
      cwe: "CWE-89"
      owasp: "A03:2021-Injection"

  - id: dangerous-innerHTML
    pattern: $ELEM.innerHTML = $VAR
    message: XSS via innerHTML assignment
    severity: ERROR
    languages: [javascript, typescript]
    metadata:
      cwe: "CWE-79"

  - id: hardcoded-aws-credentials
    patterns:
      - pattern: $KEY = "AKIA..."
      - metavariable-regex:
          metavariable: $KEY
          regex: "(aws_access_key_id|AWS_ACCESS_KEY_ID)"
    message: Hardcoded AWS credentials detected
    severity: ERROR
    languages: [python, javascript, java]

  - id: path-traversal-open
    patterns:
      - pattern: open($PATH, ...)
      - pattern-not: open(os.path.join(SAFE_DIR, ...), ...)
      - metavariable-pattern:
          metavariable: $PATH
          patterns:
            - pattern: $REQ.get(...)
    message: Path traversal via user input
    severity: ERROR
    languages: [python]

  - id: command-injection
    patterns:
      - pattern-either:
          - pattern: os.system($CMD)
          - pattern: subprocess.call($CMD, shell=True)
      - metavariable-pattern:
          metavariable: $CMD
          patterns:
            - pattern-either:
                - pattern: $X + $Y
                - pattern: f"...{$VAR}..."
    message: Command injection via shell=True
    severity: ERROR
    languages: [python]

规则结构拆解:

  • 基础字段id 全局唯一标识;message 是命中时向开发者展示的修复提示;severity 支持 ERROR / WARNING / INFOlanguages 决定规则生效的语言;metadata.cwemetadata.owasp 将发现映射到 CWE 编号与 OWASP Top 10(如 CWE-89 → A03:2021-Injection),这正是后面统一扫描器里 cwe/owasp 字段的数据来源;
  • 组合模式patterns 内并列条件须同时满足;pattern-either 表示任选其一命中;pattern-not 用于排除安全写法(如路径遍历规则显式豁免 os.path.join(SAFE_DIR, ...) 的白名单模式);
  • 元变量约束metavariable-regex 用正则约束元变量取值(如 $KEY 必须是 AWS 密钥环境变量名);metavariable-pattern 则对元变量施加模式约束(如路径遍历规则要求 $PATH 来自 $REQ.get(...) 这一用户输入来源)。

规则编写的关键在于同时声明漏洞形态与数据来源:仅匹配危险 API(如 open())会产生大量误报,叠加“输入来自用户请求”的条件后,才真正逼近“可被利用”的语义。sast-configuration 技能中同类的 hardcoded-jwt-secret 规则(pattern: jwt.encode($DATA, "...", ...))也印证了这一套路:先定位高危 API,再约束敏感上下文。

四、七类高频漏洞的检测与修复对照

文档将漏洞模式与修复方案成对呈现,形成“检测 → 修复”闭环。以下逐类说明其检测信号与安全写法。

SQL 注入

风险写法:使用字符串格式化/拼接将用户输入嵌入 SQL 查询。

安全写法

# 参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
User.objects.filter(id=user_id)  # ORM

参数化查询将数据与语句分离,是杜绝注入的根本手段;ORM 查询天然参数化。对应检测规则即上文 sql-injection-format-string

跨站脚本(XSS)

风险写法:用未经消毒的用户输入直接操作 DOM(innerHTMLouterHTMLdocument.write)。

安全写法

// 纯文本使用 textContent
element.textContent = userInput;

// React 默认转义
<div>{userInput}</div>;

// 确实需要 HTML 时先消毒
import DOMPurify from "dompurify";
element.innerHTML = DOMPurify.sanitize(userInput);

优先 textContent;React 等框架默认对插值转义;必须渲染富文本时用 DOMPurify 消毒。仓库中 frontend-security-coder 等前端安全 Agent 的职责(XSS 防护、CSP 实施)与此形成纵深呼应。

硬编码密钥

风险写法:API Key、密码、Token 直接写入源码。

安全写法

import os
API_KEY = os.environ.get('API_KEY')
PASSWORD = os.getenv('DB_PASSWORD')

密钥一律从环境变量或密钥管理系统读取。该场景与 security-secrets.md(进阶凭据扫描)及 security-hardening.md 中 Step 10 的“Secrets Management”步骤(Vault / AWS Secrets Manager、轮换策略、移除硬编码密钥)衔接紧密。

路径遍历

风险写法:直接使用未经消毒的用户输入打开文件。

安全写法

import os
ALLOWED_DIR = '/var/www/uploads'
file_name = request.args.get('file')
file_path = os.path.join(ALLOWED_DIR, file_name)
file_path = os.path.realpath(file_path)
if not file_path.startswith(os.path.realpath(ALLOWED_DIR)):
    raise ValueError("Invalid file path")
with open(file_path, 'r') as f:
    content = f.read()

防御要点有三:基于白名单目录 os.path.join 拼接、用 os.path.realpath 解析符号链接与 .. 逃逸、用 startswith 校验规范化后路径仍位于允许目录内。

不安全反序列化

风险写法:对不可信数据使用 pickle.loads()yaml.load()

安全写法

import json
data = json.loads(user_input)  # SECURE
import yaml
config = yaml.safe_load(user_input)  # SECURE

优先使用格式中立且无任意代码执行面的 json.loads;必须用 YAML 时改 yaml.safe_load。对应 Bandit 检查器 B301/B302/B303 与 B506 正是为这些模式设计。

命令注入

风险写法os.system()subprocess 开启 shell=True 且拼接用户输入。

安全写法

subprocess.run(['ping', '-c', '4', user_input])  # 数组参数
import shlex
safe_input = shlex.quote(user_input)  # 输入校验

优先传参数数组(不经过 shell,无解析注入面);确需 shell 时用 shlex.quote 转义。对应上文 command-injection 自定义规则。

不安全随机数

风险写法:将 random 模块用于安全关键操作(会话 ID、Token 生成)。

安全写法

import secrets
token = secrets.token_hex(16)
session_id = secrets.token_urlsafe(32)

random 是伪随机且可预测,安全场景必须改用 CSPRNG 的 secrets 模块。ESLint 的 security/detect-pseudo-random-prng 规则即针对 JS 侧同类问题。

五、框架级安全配置模板

SAST 不只盯单条语句,还要识别框架层面的错误配置。文档给出三大主流框架的“危险配置 → 安全基线”。

Django

危险信号@csrf_exemptDEBUG=True、弱 SECRET_KEY、缺少安全中间件。

安全基线(settings.py)

DEBUG = False
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
X_FRAME_OPTIONS = 'DENY'

要点:生产环境关闭 DEBUG(避免调试信息泄露与敏感路径暴露);SECRET_KEY 从环境注入;启用安全/CSRF/点击劫持三道中间件;强制 HTTPS 跳转、Cookie 加 Secure 标记、X-Frame-Options: DENY 防点击劫持。

Flask

危险信号debug=True、弱 secret_key、CORS 通配。

安全基线

import os
from flask_talisman import Talisman

app.secret_key = os.environ.get('FLASK_SECRET_KEY')
Talisman(app, force_https=True)
CORS(app, origins=['https://example.com'])

Talisman 统一设置安全响应头并强制 HTTPS;CORS 明确白名单来源而非 *

Express.js

危险信号:缺少 helmet、CORS 通配、无速率限制。

安全基线

const helmet = require("helmet");
const rateLimit = require("express-rate-limit");

app.use(helmet());
app.use(cors({ origin: "https://example.com" }));
app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));

helmet() 一键设置安全响应头;cors 限定来源;rate-limit 以 15 分钟窗口 100 次请求的阈值缓解暴力破解与滥用。这些模板与仓库 backend-api-security 插件的“安全后端编码、API 安全实现”职责同属一个安全编码体系。

六、统一多语言扫描器实现(源码级解读)

security-sast.md 附带了一个完整的 MultiLanguageSASTScanner 参考实现,用于把多个工具的输出统一成结构化发现(finding)。这与插件体系的设计哲学一致:安全 Auditor Agent 在扫描时正是“Execute SAST analysis (Semgrep/SonarQube patterns)”的角色(见 security-auditor.md 的审计工作流)。

核心数据结构:SASTFinding

@dataclass
class SASTFinding:
    tool: str
    severity: str
    category: str
    title: str
    description: str
    file_path: str
    line_number: int
    cwe: str
    owasp: str
    confidence: str

该结构统一了跨工具的字段口径:tool 记录来源(semgrep / bandit / eslint-security),severity 归一化为 CRITICAL/HIGH/MEDIUM/LOW,cweowasp 直接对应自定义规则中的 metadata 字段,为后续风险评分与合规映射提供数据底座。

语言自动探测

def detect_languages(self) -> List[str]:
    indicators = {
        'python': ['*.py', 'requirements.txt'],
        'javascript': ['*.js', 'package.json'],
        'typescript': ['*.ts', 'tsconfig.json'],
        'java': ['*.java', 'pom.xml'],
        'ruby': ['*.rb', 'Gemfile'],
        'go': ['*.go', 'go.mod'],
        'rust': ['*.rs', 'Cargo.toml'],
    }
    for lang, patterns in indicators.items():
        for pattern in patterns:
            if list(self.project_path.glob(f'**/{pattern}')):
                languages.append(lang)
                break
    return languages

以“扩展名 + 生态标志文件”双重信号判定语言,例如存在 *.pyrequirements.txt 即视为 Python 项目。该思路与同插件 security-dependencies.md 中的 detect_ecosystems(通过 package.jsonpyproject.tomlgo.modCargo.toml 识别 npm/pip/go/cargo 生态)完全同构,说明“按清单文件自动发现技术栈”是本插件族的通用模式。

编排与结果归一化

def run_comprehensive_sast(self) -> Dict[str, Any]:
    languages = self.detect_languages()
    scan_results = {
        'timestamp': datetime.now().isoformat(),
        'languages': languages,
        'tools_executed': [],
        'findings': []
    }
    self.run_semgrep_scan()                      # 始终执行(跨语言兜底)
    scan_results['tools_executed'].append('semgrep')
    if 'python' in languages:
        self.run_bandit_scan()                   # Python 专属
        scan_results['tools_executed'].append('bandit')
    if 'javascript' in languages or 'typescript' in languages:
        self.run_eslint_security_scan()          # JS/TS 专属
        scan_results['tools_executed'].append('eslint-security')
    scan_results['findings'] = [vars(f) for f in self.findings]
    scan_results['summary'] = self.generate_summary()
    return scan_results

编排策略是“Semgrep 无条件执行 + 按语言追加专属工具”,形成纵深覆盖。run_semgrep_scan 内部对 ['auto', 'p/security-audit', 'p/owasp-top-ten'] 三个规则集逐一执行,并解析 JSON 输出填充 SASTFinding,单条工具失败只打印告警、不中断整体扫描(except Exception as e: print(...)),体现“扫描工具应具备容错性”的工程取舍。

风险评分模型

def calculate_risk_score(self, severity_counts: Dict[str, int]) -> int:
    weights = {'CRITICAL': 10, 'HIGH': 7, 'MEDIUM': 4, 'LOW': 1}
    total = sum(weights[s] * c for s, c in severity_counts.items())
    return min(100, int((total / 50) * 100))

采用加权线性评分并钳制在 0–100:CRITICAL=10、HIGH=7、MEDIUM=4、LOW=1,total/50*100 的含义是“每 50 个加权分折算 100 分”,得分可作为质量门禁的数值依据。类似思路也出现在 security-dependencies.mdVulnerabilityPrioritizercvss*0.4 + exploitability*2.0 + fix_available*1.0 的优先级评分),可见“数值化排序发现”是该插件族的标准化产出。

七、CI/CD 集成:把 SAST 固化进流水线

文档提供了 GitHub Actions 与 GitLab CI 两套最小可运行配置,符合 “Run early and often”(尽早、频繁运行)的最佳实践。

GitHub Actions

name: SAST Scan
on:
  pull_request:
    branches: [main]

jobs:
  sast:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.11"

      - name: Install tools
        run: |
          pip install bandit semgrep
          npm install -g eslint @eslint/plugin-security

      - name: Run scans
        run: |
          bandit -r . -f json -o bandit.json || true
          semgrep --config=auto --json --output=semgrep.json || true

      - name: Upload reports
        uses: actions/upload-artifact@v4
        with:
          name: sast-reports
          path: |
            bandit.json
            semgrep.json

关键设计:on.pull_request 使扫描成为合入前置门禁;|| true 保证扫描命令非零退出不中断流水线(报告上传后人工或门禁工具再判定);upload-artifact 将 JSON 报告作为构建产物留存。若希望“命中即失败”,可参照 sast-configuration 技能改用 semgrep --config=auto --error 或在后续步骤解析 JSON 检查 CRITICAL 计数。

GitLab CI

sast:
  stage: test
  image: python:3.11
  script:
    - pip install bandit semgrep
    - bandit -r . -f json -o bandit.json || true
    - semgrep --config=auto --json --output=semgrep.json || true
  artifacts:
    reports:
      sast: bandit.json

GitLab 侧利用原生 artifacts.reports.sast 字段将 Bandit JSON 直接注册为 SAST 安全报告,可在 MR 界面原生查看;stage: test 将其纳入既有测试阶段顺序。

此外,sast-configuration 技能补充了两类轻量接入:pre-commit 钩子.pre-commit-config.yaml 中注册 semgrep hook,参数 ['--config=auto', '--error'])与 GitHub Actions 的 Semgrep 官方 actionreturntocorp/semgrep-action@v1,可同时传入 p/security-auditp/owasp-top-ten 多规则集)。

八、最佳实践十条与落地建议

文档在收尾处给出十条实践准则,可归纳为四个实施阶段:

  1. 扫描频率:pre-commit 钩子 + CI/CD 双通道,尽早频繁运行(#1);
  2. 工具策略:多工具组合,不同工具覆盖不同漏洞面(#2);使用框架专属规则集(#5);自定义组织级规则(#6);定期更新工具(#10);
  3. 结果治理:调优误报——配置排除项与阈值(#3);按 CRITICAL/HIGH 优先排序修复(#4);建立基线管理已知问题(#9);
  4. 团队机制:开发者安全编码培训(#7);增量式修复而非一次性大改(#8)。

仓库中的 sast-configuration 技能 对这些准则给出了更细的操作指引,可重点关注:

  • 基线先行:首次扫描建立安全基线,优先处理 CRITICAL/HIGH,输出修复路线图;
  • 渐进采用:先启用纯安全规则,再逐步叠加代码质量规则,仅在关键问题上设置阻断门禁;
  • 误报管理:记录合理的抑制项、为已知安全模式建立白名单、定期复审被抑制的发现;
  • 性能优化:排除测试与生成代码、大库启用增量扫描、CI 中缓存扫描结果;
  • 团队赋能:提供安全培训、沉淀内部安全模式文档、建立安全 Champion 计划。

技能中还给出了工具选型对照表,可作为 SAST 平台级决策参考:

工具 最佳场景 语言支持 成本 集成
Semgrep 自定义规则、快速扫描 30+ 语言 Free/Enterprise 极佳
SonarQube 代码质量 + 安全 25+ 语言 Free/Commercial 良好
CodeQL 深度分析、安全研究 10+ 语言 Free (OSS) GitHub 原生

九、协同工具矩阵与插件内分工

security-sast.md 明确将自己定位为 SAST 专项入口,并与同插件其他命令、Agent 构成完整的安全扫描体系:

  • security-secrets.md:进阶凭据扫描,专注密钥/Token 的深度检测(SAST 中的硬编码密钥规则是其轻量子集);
  • security-owasp.md:OWASP Top 10 映射,将发现对齐到 A01–A10 分类(对应 metadata.owasp 字段);
  • security-api.md:REST/GraphQL 端点安全测试;
  • security-scan.md:综合安全扫描编排,聚合 SAST/DAST/依赖等结果;
  • security-dependencies.md:依赖漏洞扫描 + SBOM 生成,覆盖 npm audit / safety / govulncheck / cargo audit;
  • security-hardening.md:四阶段安全加固编排(评估 → 修复 → 控制 → 验证),其 Step 1 明确要求 Agent “Execute SAST analysis (Semgrep/SonarQube patterns)”,Step 4 要求“Fix SQL injections with parameterized queries / Fix XSS with output encoding”——正是本文漏洞修复章节的工程化落地;
  • security-auditor Agentsecurity-auditor.md)与 threat-modeling-expert Agentthreat-modeling-expert.md):前者负责执行扫描与修复,后者以 STRIDE/攻击树方法做威胁建模,SAST 发现是其输入。

在 Agent 使用方式上,docs/agents.md 中的斜杠命令示例 #L369-L371 展示了 /security-scanning:security-sast 的直接调用形式;同时 security-auditor 被分配 model: opus(复杂安全审计任务),若需在流水线中自动触发,可由 orchestrator 按任务复杂度在 Sonnet(执行扫描)与 Opus(深度审计)之间编排。

结语

从工具选型、规则编写到统一扫描器与 CI/CD 落地,security-sast 命令为多语言代码库提供了一条可复制、可量化的 SAST 实施路径:以 Bandit/ESLint Security/gosec 等语言级工具覆盖各技术栈,以 Semgrep 自定义规则承载组织级安全策略,以 SASTFinding 统一数据结构收敛多工具输出,再通过风险评分与流水线门禁形成闭环。对于准备在 Claude Code、Codex、Cursor 或 Copilot 等 harness 中建立 DevSecOps 基线的团队,可从本文的配置模板与示例规则直接起步,并结合 security-hardening.md 的加固编排将扫描结果转化为系统性修复行动。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
docsdocs
暂无描述
Markdown
899
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
925
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
601
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
525
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
395