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 で形式を確認、公開ディレクトリ外に保存。

コードを検査する

ファイルを貼り付けると、このルールに該当する行をすべて示します。

コードを検査する →