云存储密钥严禁硬编码,须通过环境变量、.env文件(严格限制访问)、容器Secret等方式安全注入,并校验非空;不同云平台密钥机制差异大,需匹配region、签名版本及endpoint;临时密钥应缓存于Redis并提前刷新。
云存储密钥不能硬编码在 PHP 代码里
直接把 AWS_ACCESS_KEY_ID 或 ALIYUN_OSS_ACCESS_KEY_SECRET 写死在 .php 文件中,等于把家门钥匙贴在防盗门上。一旦代码泄露(比如误传 GitHub、被扫描到公开目录),密钥立刻失效,还可能产生高额账单。
正确做法是把密钥抽离到运行环境之外:
- 用系统环境变量:在 Web 服务器(如 Nginx/Apache)或 PHP-FPM 配置中注入
AWS_ACCESS_KEY_ID=xxx,PHP 中用getenv('AWS_ACCESS_KEY_ID')读取 - 用独立配置文件(如
.env):配合vlucas/phpdotenv加载,但必须确保该文件不在 Web 根目录下(例如放在/var/www/config/.env),且 Web 服务器明确禁止访问.env后缀 - 容器场景下优先使用 Secret 挂载(Docker/K8s),避免任何文件落地
PHP SDK 初始化时别用明文拼接密钥
有些老教程会写:$client = new OssClient($accessKeyId, $accessKeySecret, $endpoint) —— 这本身没错,但前提是这两个参数已从安全渠道获取。问题常出在“怎么拿到它们”这一步。
常见错误包括:
立即学习“PHP免费学习笔记(深入)”;