파일 업로드는 웹 사이트 개발에서 매우 일반적인 기능이지만, 이와 관련된 질문은 업로드 된 파일의 무결성과 보안을 보장하는 방법입니다. 전송 중에 파일이 변조 될 수 있거나 악성 파일이 업로드되었습니다. PHP는 편리한 기능 MD5_File () 을 제공하여 개발자가 파일의 MD5 확인 코드를 신속하게 계산하여 파일이 변조되었는지 또는 손상되었는지 확인하는 데 도움이 될 수 있습니다.
md5_file ()은 지정된 파일의 MD5 해시 값을 직접 계산하고 32 비트 문자열을 반환하는 PHP 내장 기능입니다. MD5 해시 값은 파일 내용이 일관되는지 여부를 감지하는 데 사용될 수 있습니다. 파일 콘텐츠에 대한 변경 사항이 있으면 해당 MD5 값이 다릅니다.
기능 프로토 타입 :
string md5_file ( string $filename [, bool $raw_output = false ] )
$ filename : 파일 경로.
$ raw_output : 원래 바이너리 형식을 반환할지 기본값으로 거짓 으로 반환할지 여부는 32 비트 16 진수 문자열을 반환합니다.
업로드 된 파일의 무결성을 확인하십시오 <br> 사용자가 파일을 업로드하면 서버는 업로드 된 파일의 MD5 값을 계산하고 파일을 변조하지 않았는지 확인하기 위해 업로드하기 전에 클라이언트가 계산 한 MD5 값과 비교합니다.
중복 업로드 방지 <br> MD5 값을 사용하여 중복 스토리지를 피하기 위해 서버에 이미 동일한 콘텐츠가있는 파일이 있는지 확인하십시오.
안전 테스트 <br> 파일의 MD5 값을 알려진 악성 파일의 MD5 값 라이브러리와 비교하여 위험한 파일을 필터링 할 수 있습니다.
아래는 md5_file ()을 사용하여 파일 무결성을 확인하는 간단한 파일 업로드 예입니다.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload_file'])) {
$uploadDir = '/var/www/uploads/';
$uploadedFile = $_FILES['upload_file']['tmp_name'];
$originalName = $_FILES['upload_file']['name'];
// 업로드 된 파일을 계산합니다 md5 값
$md5Hash = md5_file($uploadedFile);
// 여기에서 고객에게 보낼 수 있습니다md5값比对,고객이오고 있다고 가정 해 봅시다md5값
$clientMd5 = $_POST['client_md5'] ?? '';
if ($clientMd5 && $md5Hash !== $clientMd5) {
echo "업로드 된 파일의 무결성 검증에 실패했습니다,파일이 변조되었을 수 있습니다。";
exit;
}
// 반복 업로드를 방지합니다(예에서 간단한 사용md5파일 이름으로)
$destination = $uploadDir . $md5Hash;
if (file_exists($destination)) {
echo "파일이 이미 존재합니다,반복적으로 업로드 할 필요가 없습니다。";
} else {
if (move_uploaded_file($uploadedFile, $destination)) {
echo "파일 업로드를 성공적으로 업로드하십시오,MD5값为:$md5Hash";
} else {
echo "파일 업로드가 실패했습니다。";
}
}
} else {
?>
<form method="post" enctype="multipart/form-data" action="http://m66.net/upload.php">
파일을 선택하십시오:<input type="file" name="upload_file" required><br>
문서MD5확인 코드(선택 과목):<input type="text" name="client_md5"><br>
<button type="submit">업로드</button>
</form>
<?php
}
?>
프론트 엔드 사용자는 먼저 도구를 사용하여 파일의 MD5를 계산하고 양식의 Client_MD5 필드를 채울 수 있습니다. 서버 측은 업로드 된 파일의 MD5를이 값과 비교합니다.
서버 측은 파일의 MD5 값을 저장 이름으로 사용하여 반복 된 파일의 업로드를 방지합니다.
move_uploaded_file () 함수는 파일이 임시 디렉토리에서 대상 디렉토리로 안전하게 이동하도록합니다.
파일 유형 제한 : 업로드하기 전에 파일 확장 및 마임 유형을 확인하십시오.
파일 크기 제한 : 과도한 서버 압력이 과도한 파일을 업로드하지 않도록합니다.
HTTPS 사용 : 파일 전송 프로세스가 Man-in-the-Middle에 의해 공격되지 않도록하십시오.
정기적으로 악성 파일 라이브러리 업데이트 : 파일 MD5를 사용하여 알려진 바이러스 데이터베이스와 비교하여 위험한 파일을 필터링하십시오.
업로드 디렉토리에 직접 액세스하지 마십시오 . 보안 저장 경로 및 권한 제어를 사용하십시오.