인터넷이 개발되면서 파일 업로드 기능이 웹 사이트 개발에서 점점 더 중요 해지고 있습니다. 그러나 PHP 파일 업로드 기능도 보안 위험을 초래할 수 있습니다. 해커는 악성 파일을 업로드하기 위해 취약점을 악용하여 웹 사이트를 공격 할 수 있습니다. 이 기사는 PHP 파일 업로드 취약점의 원칙 및 공격 방법을 소개하고 효과적인 보호 조치를 제공합니다.
PHP 파일 업로드 취약점은 주로 다음 두 가지 측면에서 비롯됩니다.
파일 유형 확인이 불완전합니다. $ _files 배열은 파일 업로드를 처리하는 데 사용됩니다. 업로드 프로세스 중에 $ _files에는 크기, 파일 유형과 같은 정보가 포함되어 있습니다. 그러나 공격자는 업로드 요청을 가짜로, 악성 파일을 허용 파일 유형으로 위장 할 수 있습니다.
부적절한 파일 실행 권한 : PHP 서버가 파일을 저장하고 업로드 할 때 파일 실행 권한이 올바르게 설정되거나 확인되지 않으면 공격자는 악성 파일을 업로드하고 임의의 코드를 실행할 수 있습니다.
파일 유형 우회 : 공격자는 "vil.php"를 "vil.jpg"로 업로드하고 다른 방식으로 악성 코드를 실행하는 등 서버 확인을 우회하기 위해 파일 확장을 수정할 수 있습니다.
스레드 경쟁 공격 : 공격자는 동시에 여러 파일을 업로드합니다. 레이스 조건을 만들어 악성 파일을 합법적 인 파일로 대체하여 서버가 컨텐츠 업로드를 잘못 수행하게합니다.
PHP 파일 업로드 취약점을 방지하기 위해 다음 측정을 수행 할 수 있습니다.
화이트리스트 설정 : 업로드 할 수있는 파일 유형을 제한하고 특정 유형의 파일 만 업로드 할 수 있습니다. 샘플 코드는 다음과 같습니다.
$allowedTypes = ['jpg', 'jpeg', 'png'];
$fileExt = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($fileExt, $allowedTypes)) {
die("File type not allowed.");
}
파일 이름 지정 전략 : 파일 업로드는 무작위로 생성 된 파일 이름을 사용하고 날짜 또는 접두사와 함께 독창성을 보장하여 파일 이름을 추측하여 공격자가 파일에 액세스하지 못하게해야합니다.
파일 크기 제한 : 서버 리소스가 소진되는 파일의 과도한 업로드를 방지합니다. 샘플 코드는 다음과 같습니다.
$maxSize = 1024 * 1024; // 1MB
if ($_FILES['file']['size'] > $maxSize) {
die("File size exceeds limit.");
}
파일 내용 확인 : 파일 확장자를 확인할뿐만 아니라 파일이 유효한 형식인지 확인하기 위해 이미지 파일을 확인하는 것과 같은 파일 콘텐츠를 구문 분석합니다.
if (exif_imagetype($_FILES['file']['tmp_name']) === false) {
die("Invalid image file.");
}
파일 권한 제어 : 파일을 저장하고 업로드 할 때 파일을 실행할 수 없는지 확인하십시오. 읽기 전용 권한을 설정하거나 실행 권한을 차단하여 코드가 실행되는 것을 방지 할 수 있습니다.
요약하면, PHP 파일 업로드 취약점은 일반적인 보안 위험이지만 파일 유형 확인, 파일 이름 지정 정책, 파일 크기 제한, 파일 콘텐츠 검사 및 파일 권한 제어를 강화함으로써 이러한 취약점을 효과적으로 보호 할 수 있으며 웹 사이트 및 사용자를 보장 할 수 있습니다.