本文目录导读:

在PHP项目中实现容器安全扫描,通常需要结合 CI/CD 流程、专用扫描工具和最佳实践,以下是完整的实现方案:
基础镜像层扫描
使用 Docker Scout(推荐)
# 在 Dockerfile 构建后 docker scout quickview your-image:tag docker scout cves your-image:tag # 集成到 CI/CD docker scout ci your-image:tag --exit-code
Trivy 扫描(开源方案)
# 安装 Trivy brew install trivy # macOS apt install trivy # Linux # 扫描镜像 trivy image your-php-app:latest trivy image --severity HIGH,CRITICAL your-php-app:latest # 扫描文件系统 trivy filesystem --severity CRITICAL .
Dockerfile 安全配置
# 使用官方最小化镜像
FROM php:8.2-fpm-alpine3.18 AS base
# 安全配置
RUN set -eux; \
# 更新系统包
apk update; \
# 安装必要工具
apk add --no-cache \
bash \
curl \
# 避免安装不必要的包
; \
# 清理缓存
rm -rf /var/cache/apk/*
# 非 root 用户运行
RUN addgroup -g 1000 -S appgroup && \
adduser -u 1000 -S appuser -G appgroup
USER appuser
# 限制可执行权限
COPY --chown=appuser:appgroup . /var/www/html
RUN chmod -R 755 /var/www/html
PHP 依赖安全扫描
Composer 审计
{
"scripts": {
"security-check": [
"@composer audit",
"@php vendor/bin/security-checker security:check composer.lock"
]
}
}
# 使用 composer 内置审计功能 composer audit # 使用 Enlightn 安全检查 composer require enlightn/enlightn php artisan enlightn
持续扫描(使用 GitHub Actions)
name: Security Scan
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install dependencies
run: composer install --no-interaction --prefer-dist
- name: Run security checks
run: |
composer audit
composer run security-check
- name: Scan container
uses: aquasecurity/trivy-action@master
with:
image-ref: 'your-php-app:latest'
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
运行时安全扫描
PHP 安全配置
; php.ini 安全配置 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source expose_php = Off display_errors = Off log_errors = On error_log = /var/log/php_errors.log allow_url_fopen = Off allow_url_include = Off
代码安全扫描
<?php // 使用 PHPStan 进行静态分析 // composer require --dev phpstan/phpstan // 配置文件:phpstan.neon // parameters: // level: max // paths: // - src // - tests // checkMissingIterableValueType: true // 运行:vendor/bin/phpstan analyse --configuration phpstan.neon
完整的 CI/CD 管道示例
Jenkins Pipeline
pipeline {
agent any
stages {
stage('Build Image') {
steps {
sh 'docker build -t php-app:${BUILD_NUMBER} .'
}
}
stage('Security Scan') {
parallel {
stage('Trivy Scan') {
steps {
sh '''
trivy image \
--severity HIGH,CRITICAL \
--exit-code 1 \
php-app:${BUILD_NUMBER}
'''
}
}
stage('Dependency Check') {
steps {
sh '''
composer audit --format=json || true
vendor/bin/phpstan analyse --level=max src/
'''
}
}
stage('Docker Bench') {
steps {
sh '''
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/docker-bench-security
'''
}
}
}
}
stage('Deploy') {
when {
allOf {
branch 'main'
expression { currentBuild.result == 'SUCCESS' }
}
}
steps {
sh 'docker push registry.example.com/php-app:${BUILD_NUMBER}'
}
}
}
}
监控与告警
Prometheus + Grafana 监控
# docker-compose.yml 添加 Prometheus 监控
version: '3.8'
services:
app:
image: your-php-app:latest
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
定期扫描脚本
#!/bin/bash # security-scan.sh - 自动化安全检查脚本 # 1. 镜像扫描 echo "=== Trivy Image Scan ===" trivy image --severity HIGH,CRITICAL your-php-app:latest # 2. 依赖检查 echo -e "\n=== Composer Audit ===" composer audit --format=json | jq '.advisories' # 3. 代码安全检查 echo -e "\n=== PHPStan Analysis ===" vendor/bin/phpstan analyse --level=max --memory-limit=1G src/ # 4. 配置检查 echo -e "\n=== PHP Security Checker ===" vendor/bin/security-checker security:check composer.lock # 5. 报告生成 echo -e "\n=== Generating Report ===" python3 generate_report.py
最佳实践总结
- 分层扫描:从基础镜像到应用代码多层扫描
- 持续集成:将扫描嵌入到 CI/CD 流程中
- 最小权限:使用非 root 用户运行容器
- 镜像精简:使用 Alpine 基础镜像,减少攻击面
- 依赖更新:定期更新 PHP 和 composer 依赖
- 配置验证:使用 php.ini 安全配置模板
- 日志监控:配置容器日志和告警系统
- 定期审计:每月进行全面的安全审计
通过以上方案,可以大幅提升 PHP 容器应用的安全性,及时发现并修复潜在的安全漏洞。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播