phpsafe 𝕏 GitHub
官方 CA 421DTkQ3TSG3n7F9SkNZj9NxvdFGbypwkctPd2uupump 仅此地址为官方地址。

使用原始文件名保存上传

严重程度: 高 CWE-434 OWASP A04:2021 Insecure Design rule: upload

为什么危险

保留原始文件名,攻击者就能把 shell.php 上传到公开目录并执行。随机文件名、真实类型校验以及存放在网站根目录外可以阻止这种攻击。

✕ 有漏洞的写法
move_uploaded_file($_FILES['f']['tmp_name'], 'uploads/' . $_FILES['f']['name']);
✓ 安全的写法
$tmp  = $_FILES['f']['tmp_name'];
$mime = (new finfo(FILEINFO_MIME_TYPE))->file($tmp);
$ext  = ['image/png' => 'png', 'image/jpeg' => 'jpg'][$mime] ?? null;
if ($ext === null) {
    exit('Images only');
}
$name = bin2hex(random_bytes(16)) . '.' . $ext;
move_uploaded_file($tmp, '/var/app-uploads/' . $name);

修复方法

用 bin2hex(random_bytes(16)) 生成随机名,用 finfo 检查类型,并存放在网站根目录外。

扫描我的代码

粘贴文件,PHP Safe 会指出所有符合此规则的代码行。

扫描我的代码 →