AI 帮我写的代码,上线前到底能不能信?我跑了一轮代码安全体检

功能跑得越快,越要补上那个没人看的步骤:代码上线前,有没有人认真问过一句"这里有没有危险写法"。

先说我遇到的真实情况

我最近准备把一个工具站做上线。项目里有一部分后端代码是 AI 辅助生成的,功能测试也过了,看起来能跑。

但越接近上线,我越不踏实:

AI 生成代码的问题不是"写不出来",而是它会把 f-string 拼 SQL、pickle.loads、subprocess.run(..., shell=True) 这些写法写得非常自然。只要功能正常,人眼很容易跳过去。

比如这一段:

python 复制代码
username = request.form["username"]
password = request.form["password"]

sql = f"SELECT * FROM users WHERE username='{username}' AND password='{password}'"
cursor.execute(sql)

如果只看"能不能登录",它是能跑的。

但它最应该被上线前拦下来,因为 username 和 password 来自用户输入,直接拼进 SQL 就可能是注入点。

再看这一段:

python 复制代码
encoded = request.args.get("data")
data = pickle.loads(base64.b64decode(encoded))

用 pickle.loads 处理来自请求的参数,轻则逻辑异常,重则可能被构造恶意序列化数据。

所以我的判断是:AI 代码可以帮我写得快,但不能替我做安全检查。

我要的不是"保证没漏洞",而是先筛出该看哪里

我不是安全工程师,也不想假装自己能人工审计整个项目。

上线前我需要的是三件事:

  1. 在本地跑一遍,不把还没公开的代码传给别人;
  2. 快速得到"哪里可能有危险"的问题清单;
  3. 扫完之后,我知道哪些要人工看,哪些可以跳过。

我用 code-audit-cli 做了一个实验:拿一份自己准备的示例项目,先扫描,再人工逐条看结果。

安装很简单:

bash 复制代码
python -m pip install dist/code_audit_cli-0.1.0-py3-none-any.whl

运行扫描:

bash 复制代码
code-audit demo_app --format json --output scan.json

第一轮结果大概是这样:

级别 规则 风险原因 示例片段
High sql-concat SQL 由 f-string 拼接生成,可能被注入 SELECT * FROM users WHERE username='{username}'
High pickle-loads 反序列化不可信输入,可能执行危险代码 pickle.loads(base64.b64decode(encoded))
High eval-exec-subprocess 使用 shell 执行动态命令 subprocess.run(command, shell=True)
Medium raw-html-reflect 用户输入直接反射到 HTML,可能需要编码 results for {query}
Medium unvalidated-file-path 文件路径可能来自用户输入且未限制范围 (WEB_DIR / file_name).resolve()

汇总结果:high=3、medium=2、low=0、total=5。

这个结果不算"这个项目被黑定了",但它足够告诉我:上线前应该先把这三处 high 看一遍。

我为什么先重视三条 High

SQL 拼接

python 复制代码
sql = f"SELECT ... WHERE username='{username}' AND password='{password}'"

用户输入直接进入 SQL 字符串。真正修复应该改成参数化查询,而不是靠过滤关键字。

pickle.loads

python 复制代码
pickle.loads(base64.b64decode(encoded))

反序列化不可信数据时,恶意载荷可能触发任意代码执行。能用普通 JSON 的地方,不要随便上 pickle。

subprocess + shell=True

python 复制代码
subprocess.run(command, shell=True)

如果 command 里有用户可控内容,shell=True 会放大风险。优先用参数列表形式,避免让 shell 解释整段字符串。

这些都不是"扫描器自己发现漏洞",它们只是把可疑代码从几千行里捞出来。最后要不要上线、怎么修,还是得人来判断。

拿到结果之后,我还做了两件事

1. 处理误报,而不是无脑全信

启发式规则一定有误报。比如规则只是看到了"看起来像"的写法,不一定代表它真的能被打。

项目里如果某个规则确实不适用,可以临时跳过:

bash 复制代码
code-audit demo_app --skip-rule raw-html-reflect

真正上线前,我不会只执行这一句,而是逐条人工确认后再决定是否忽略。

2. 先生成基线,以后只关注新增问题

一次扫描的价值有限。代码还会继续改,改了可能又会带回危险写法。

所以我会先保存基线:

bash 复制代码
code-audit src --write-baseline baseline.json

后续每次改动后只跑增量:

bash 复制代码
code-audit src --baseline baseline.json

这样"上线前检查"不会变成一次性心理安慰。

最后,说说 AI 代码上线前最缺什么

AI 生成代码真正的问题,不是"它有没有漏洞",而是:

一个项目从"AI 能写出来"到"敢上线",中间缺少一道可重复的安全检查。

自动扫描不会替我证明代码绝对安全,也不会替代人工审计。它能做的是让这步检查变快、可复现、能接入流程。

如果你也准备把 AI 辅助写的代码放到线上,我的建议是:先拿一个示例项目跑一遍,看清报告长什么样,再决定要不要把它接进自己的发布流程。

我用的是 code-audit-cli 代码安全体检 CLI,它支持本地扫描并输出 Markdown、HTML、JSON 和 SARIF,也可以接 CI。当前定位是轻量快速体检,不是"扫一次就万事大吉"的万能工具。

你觉得 AI 生成代码上线前,最该先补的是哪一步?

相关推荐
颜进强6 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
VIP_CQCRE6 小时前
把 OpenCode 接入 Ace Data Cloud:让 VS Code、Cursor、Windsurf 统一调用 AI 编程模型
vscode·大模型·ai编程·opencode·acedatacloud
郑州光合科技余经理8 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
三水写代码8 小时前
手写一个 Claude Code(1):从 Agent Loop 到工具、权限、Hooks 与任务规划
python·ai编程·claude·ai agent·claudecode
AI砖家9 小时前
Claude Code Skill 质量检查实战:用 /skill-doctor + Plugin Evals 找出“看似能用、实际没被调用“的问题
人工智能·ai编程·claude·codex·skill
anda010910 小时前
A2UI 协议: AI 直接画界面,而不是只会打字
人工智能·ai编程
用户215782839663310 小时前
AI 写了 7300 行 MoonBit:编译器能验的,和验不了的
ai编程
正在走向自律10 小时前
从只写接口到独立交付前后端,飞算JavaAI能给Java后端工程师多少溢价?
java·springboot·ai编程·全栈开发·java求职·飞算javaai·金九银十
全栈弄潮儿12 小时前
3 个能立刻复用的 AI 编程工作流
aigc·openai·ai编程