PHP Ziparchive Extension은 개발자에게 PHP에서 Zip 파일을 작동 할 수있는 기능을 제공합니다. 프로젝트가 안전하고 신뢰할 수 있도록 예상치 못한 오류 또는 잠재적 보안 위험을 피하기 위해 일부 모범 사례를 따라야합니다.
Ziparchive는 기본적으로 Zip 파일의 무결성을 확인하지 않으므로 악성 파일이 추출되거나 기존 파일을 덮어 쓸 수 있습니다. 안전 모드는 다음과 같은 방식으로 활성화 할 수 있습니다.
<span class="fun">$ Zip-> Open ( "Archive.zip", Ziparchive :: Create | Ziparchive :: Overwrite | Ziparchive :: Checkcons);</span>
기본적으로 Ziparchive는 모든 파일 또는 디렉토리에 액세스 할 수 있습니다. 보안이 강화 되려면 포장 할 파일 및 디렉토리를 지정할 수 있습니다.
$zip->setArchiveComment("안전한 아카이브");
$zip->addFromPath("files/important.txt");
추출하기 전에 손상된 파일 추출을 피하기 위해 아카이브 무결성을 확인하십시오.
if ($zip->statusSys === ZIPARCHIVE::ER_OK) {
// 전체적으로 보관되었습니다,추출 할 수 있습니다
} else {
// 아카이브가 손상되었습니다,철수를 거부하십시오
}
비밀번호 보호는 민감한 데이터를 포함하는 아카이브에 사용해야합니다.
<span class="fun">$ zip-> setpassword ( "I 'm Safe");</span>
악의적 인 업로드 또는 대형 파일을 방지하기 위해 단일 파일 또는 전체 아카이브의 최대 파일 크기를 설정하십시오.
<span class="fun">$ zip-> setMaxSize (1024000); // 1MB로 제한합니다</span>
기본적으로 Ziparchive는 상징적 링크를 따르지 않습니다. 다음 방법을 사용할 수 있습니다.
<span class="fun">$ zip-> setexternalattributesName ( "Sym.Link", ZipAncive :: opsys_unix, Ziparchive :: opsys_unix_symlink);</span>
아카이브를 생성하거나 추출 할 때는 서버에서 불필요한 파일을 생성하지 않기 위해 임시 디렉토리를 사용하는 것이 좋습니다.
<span class="fun">$ zip-> settempdir (sys_get_temp_dir ());</span>
작업을 완료 한 후에는 Ziparchive 객체 및 관련 리소스를 Close () 방법을 사용하여 자원 누출을 방지해야합니다.
<span class="fun">$ zip-> close ();</span>
ziparchive를 사용하는 과정에서 오류가 발생할 수 있습니다. getStatusString () 을 통해 오류 정보를 얻고 처리 할 수 있습니다.
if ($zip->getStatusString() === ZIPARCHIVE::ER_INCONS) {
// 아카이브는 일관성이 없습니다,작업을 거부하십시오
}
프로덕션 환경에서 ZipAchive를 사용하기 전에 코드를 완전히 테스트하고 보안, 신뢰성 및 성능을 확인하고 팀이 이해할 수 있도록 구현을 자세히 기록해야합니다.
다음 예제는 모범 사례를 통해 ziparchive를 사용하여 파일을 패키지하는 방법을 보여줍니다.
<?PHP
$zip = new ZipArchive();
$zip->open("archive.zip", ZipArchive::CREATE | ZipArchive::OVERWRITE | ZipArchive::CHECKCONS);
$zip->setArchiveComment("안전한 아카이브");
$zip->addFromPath("files/important.txt");
$zip->setExternalAttributesName("sym.link", ZipArchive::OPSYS_UNIX, ZipArchive::OPSYS_UNIX_SYMLINK);
$zip->setMaxSize(1024000);
$zip->setTempDir(sys_get_temp_dir());
$zip->close();
?>
이러한 모범 사례에 따라 개발자는 PHP Ziparchive를 사용하여 안전하고 안정적인 패키징 및 데이터 추출을 확장하여 보안 취약점, 데이터 손실 및 성능 문제를 효과적으로 방지 할 수 있습니다.