Deterministic Security Scanning Build Loop

Nikola Balic (@nibzard)· proposed

问题

AI代码生成领域的非确定性安全方案(如Cursor规则、MCP安全工具)从本质上存在缺陷,因为安全要求绝对的确定性——代码要么安全,要么不安全,不存在灰色地带。这类方案仅仅是向LLM提出的建议,无法保证LLM会始终遵循。

方案

通过构建循环采用两阶段方法实现确定性安全验证

  1. 生成阶段(非确定性):Agent基于建议和context生成代码
  2. 回压阶段(确定性):安全扫描工具验证生成的代码

关键在于将现有安全扫描工具(SAST、DAST、PBT)直接集成到Agent每次代码变更后必须执行的构建目标中。

.PHONY: all build test security-scan

all: build test security-scan

build:
    @echo "Build completed successfully"
    @exit 0

test:
    @echo "Tests completed successfully" 
    @exit 0

security-scan:
    # 使用您现有的安全扫描工具
    semgrep --config=auto src/
    bandit -r src/
    @exit $?

配置Agent指令以强制要求执行构建:

# Agent指令

如何使用

  1. 内循环(开发阶段)
  • 将现有安全扫描工具集成到构建目标中
    • 配置Agent指令,在每次代码变更后触发构建
    • 让Agent读取安全工具的输出结果并完成迭代
  1. 外循环(CI/CD阶段)
  • 在拉取请求检查环节使用相同的安全扫描工具
    • 在两个循环中维护统一的规则数据库
  1. 实施步骤
  • 在Makefile/package.json/构建脚本中添加安全扫描工具
    • 更新Agent配置(AGENTS.md/Cursor规则),强制要求执行构建流程
    • 确保安全工具在检测到违规情况时返回非零退出码

权衡

优点

  • 利用确定性、经实战检验的安全工具
  • 复用现有安全基础设施与规则
  • 可与任意编码Agent/管控框架协同工作
  • 提供一致性的安全验证

缺点

  • 增加构建时间与CI资源消耗
  • 可能产生需要人工复核的误报
  • 为获得良好的开发者体验,要求使用响应迅速的安全工具

参考文献

关键词

提及Geoffrey Huntley关于安全代码生成的博客文章,指出安全代码生成的相关思路可推广至代码质量管控与模式约束等非安全领域场景。

直译

来源摘要

正在获取来源并生成中文摘要…

来源: https://ghuntley.com/secure-codegen/

← 返回社区