必须同步满足GDPR与《网络安全法》《个人信息保护法》要求:一、环境变量不可变初始化;二、静态数据字段级加密(AES-256-GCM);三、动态SQL字段白名单过滤;四、HTTPS与TLSv1.3强制升级;五、审计日志与RBAC双轨控制。

如果您正在部署一个PHP项目,且该系统处理欧盟居民或中国境内用户的个人信息,则必须同步满足GDPR与《网络安全法》《个人信息保护法》的强制性技术要求。以下是实现合规性部署的关键配置项:
一、环境变量不可变初始化
GDPR第5条“可问责性”与《个人信息保护法》第51条均要求证明敏感配置未被运行时篡改。phpdotenv默认加载的环境变量可被putenv()覆盖,构成审计风险。
1、在项目入口文件(如index.php)顶部调用Dotenv::createImmutable(__DIR__)
2、确认.env文件已加入.gitignore,且生产环境禁止通过Web界面或API暴露环境变量值
立即学习“PHP免费学习笔记(深入)”;
3、对关键密钥字段执行notEmpty()校验,例如ENCRYPTION_KEY必须非空且长度为32字节
二、静态数据字段级加密配置
GDPR第32条与《网络安全法》第21条明确要求对存储的个人数据实施适当技术措施。必须使用可逆加密而非哈希,以支持被遗忘权与数据可携权的技术履行。
1、选用AES-256-GCM算法(PHP 7.1+),禁用ECB、CBC等存在填充预言攻击风险的模式
2、从环境变量读取32字节密钥,使用hex2bin()转换为二进制格式
3、每次加密生成12字节随机IV,并将IV、认证标签($tag)、密文三者拼接后base64编码存储
4、数据库字段类型设为VARCHAR(384)或更大,避免base64截断导致解密失败
三、动态SQL字段白名单强制过滤
GDPR第5条“数据最小化”与《个人信息保护法》第6条“最小必要原则”禁止过度收集。SELECT *会拉取非必要字段,构成系统性违规。
1、所有数据库查询语句显式声明字段名,例如SELECT id, email, created_at FROM users
2、在PDO::FETCH_ASSOC结果返回后,立即调用array_filter()剔除白名单外的键名
3、建立全局白名单常量数组,例如define('USER_EXPORT_FIELDS', ['id', 'name', 'phone'])
4、禁止在日志、调试输出、API响应中返回未经filter的原始结果集
四、HTTPS与TLS协议强制升级
《网络安全法》第21条与GDPR第32条均要求保障传输中数据的完整性与保密性。明文HTTP或弱TLS配置将直接导致合规失效。
1、Nginx配置中强制启用TLSv1.3,禁用TLSv1.0和TLSv1.1
2、ssl_ciphers设置为TLS_AES_256_GCM_SHA384,禁用CBC类密码套件
3、启用ssl_prefer_server_ciphers on与HSTS头(max-age=31536000; includeSubDomains)
4、PHP端使用stream_context_create()配置SSL上下文,校验服务端证书有效性
五、审计日志与访问控制双轨配置
GDPR第32条“可问责性”与《个人信息保护法》第51条要求留存操作痕迹并实施最小权限访问。缺乏可验证日志即视为未履行安全保障义务。
1、创建audit_log表,包含user_id、action、target_table、target_id、ip_address、timestamp字段
2、所有敏感操作(如UPDATE user SET phone=?, SELECT * FROM patient_records)触发INSERT INTO audit_log
3、RBAC权限体系中,医生角色仅可访问patient_records视图而非基表,视图预设WHERE doctor_id = ?
4、登录成功后记录session_id哈希值,失败登录尝试超过5次锁定IP 15分钟



















