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로 실제 파일 형식을 확인하고, 웹 폴더 밖에 저장하세요.

내 코드 검사하기

파일을 붙여넣으면 이 규칙에 걸리는 줄을 모두 찾아드립니다.

내 코드 검사하기 →