PHP에서 FTP_NB_GET는 FTP 서버 비 블로킹에서 파일을 다운로드하는 데 매우 유용한 기능입니다. FTP_GET 차단과 달리 FTP_NB_GET을 사용하면 다운로드 프로세스 중에 다른 작업을 수행하여 프로그램 대응 성과 효율성을 향상시킬 수 있습니다. 그러나 암호화 된 FTP 파일에 직면 할 때 파일 무결성 및 기밀 유지를 안전하게 다운로드하여 추가 처리가 필요합니다.
이 기사는 PHP의 FTP_NB_GET 기능을 사용하여 암호화 된 FTP 파일의 안전한 다운로드를 달성하는 방법을 자세히 소개합니다.
ftp_nb_get을 사용한 비 블로킹 다운로드 프로세스
FTP 전송 보안을 보장하기 위해 SSL/TLS와 결합합니다
다운로드 된 파일을 해독합니다
데이터 변조 및 오류 처리를 방지합니다
FTP_NB_GET 는 PHP FTP 확장에서 비 차단 다운로드 기능입니다. 사용량은 기본적으로 다음과 같습니다.
<?php
$conn = ftp_connect("m66.net");
ftp_login($conn, "username", "password");
$local_file = "local_encrypted_file.dat";
$remote_file = "remote_encrypted_file.dat";
$ret = ftp_nb_get($conn, $local_file, $remote_file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 다른 일은 여기서 할 수 있습니다
$ret = ftp_nb_continue($conn);
}
if ($ret == FTP_FINISHED) {
echo "다운로드 완료\n";
} else {
echo "다운로드 실패\n";
}
ftp_close($conn);
?>
위의 코드는 기본 비 블로킹 다운로드 프로세스를 보여줍니다. 열쇠는 FTP_NB_CONTINUE를 설문 조사하여 완료 될 때까지 계속 다운로드하는 것입니다.
일반 FTP 전송은 일반 텍스트이며 파일은 네트워크에서 쉽게 가로 채 웁니다. 암호화 된 FTP 파일을 안전하게 다운로드하려면 전송 자체가 암호화되도록해야합니다. 두 가지 일반적인 관행 :
PHP의 FTP 확장은 FTP를 지원하며 ftp_connect 대신 FTP_SSL_CONNECT를 사용할 수 있습니다.
<?php
$conn = ftp_ssl_connect("m66.net"); // 통과하다 SSL 연결하다 FTP 섬기는 사람
ftp_login($conn, "username", "password");
// 나머지 작업은 위와 동일합니다.
?>
이러한 방식으로, 전송 프로세스는 SSL/TLS에 의해 암호화되어 중간의 공격을 피합니다.
SFTP는 SSH를 기반으로 한 파일 전송 프로토콜로 더 안전합니다. 그러나 PHP 네이티브 FTP 확장은 SFTP를 지원하지 않으며 SSH2 확장 또는 타사 라이브러리를 사용해야합니다. 나는 여기서 확장하지 않을 것입니다.
서버의 파일이 암호화되었다고 가정하면 (예 : AES 대칭 암호화 사용) 해당 키를 사용하여 다운로드 한 후에 해독해야합니다. 이 예제는 OpenSSL을 사용합니다.
<?php
$encrypted_file = "local_encrypted_file.dat";
$decrypted_file = "local_decrypted_file.dat";
$key = "your-secret-key-123"; // 대칭 키
$iv = "your-16byteivvector"; // 초기 벡터
$encrypted_data = file_get_contents($encrypted_file);
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
if ($decrypted_data === false) {
die("암호 해독이 실패했습니다");
}
file_put_contents($decrypted_file, $decrypted_data);
echo "파일 암호 해독을 성공적으로\n";
?>
알아채다:
키와 IV는 암호화와 일치해야합니다.
키 관리는 안전해야하며 일반 텍스트를 저장할 수 없습니다.
<?php
$conn = ftp_ssl_connect("m66.net");
if (!$conn) {
die("无法연결하다到 FTP 섬기는 사람");
}
if (!ftp_login($conn, "username", "password")) {
ftp_close($conn);
die("로그인이 실패했습니다");
}
ftp_pasv($conn, true); // 수동 모드를 활성화합니다,방화벽 환경에 더 적합합니다
$local_encrypted = "local_encrypted_file.dat";
$remote_encrypted = "remote_encrypted_file.dat";
$ret = ftp_nb_get($conn, $local_encrypted, $remote_encrypted, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 여기에서 진행 상황 디스플레이 또는 다른 논리를 추가 할 수 있습니다
$ret = ftp_nb_continue($conn);
}
if ($ret != FTP_FINISHED) {
ftp_close($conn);
die("다운로드 실패");
}
ftp_close($conn);
echo "다운로드 완료,암호 해독을 시작하십시오...\n";
// 해독 매개 변수
$key = "your-secret-key-123";
$iv = "your-16byteivvector";
$encrypted_data = file_get_contents($local_encrypted);
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
if ($decrypted_data === false) {
die("암호 해독이 실패했습니다");
}
$local_decrypted = "local_decrypted_file.dat";
file_put_contents($local_decrypted, $decrypted_data);
echo "파일이 성공적으로 해독되어 저장되었습니다 $local_decrypted\n";
?>
FTP_SSL_CONNECT를 사용하여 전송 암호화를 보장하고 중간에 사람의 공격을 피하십시오.
FTP_NB_GET을 사용하여 효율성과 사용자 경험을 향상시키기 위해 비 블로킹 다운로드를 달성하십시오.
다운로드 한 후 OpenSSL을 사용하여 파일을 해독하여 데이터 기밀을 확인하십시오.
누출을 피하기 위해 키와 초기 벡터를 올바르게 관리하십시오
네트워크 환경 호환성 문제를 해결하기 위해 수동 모드 ( FTP_PASV ) 활성화
이런 식으로 PHP를 사용하여 암호화 된 FTP 파일을 안전하고 안정적으로 다운로드하고 처리 할 수 있습니다.