FTP_Rawlist () 함수는 PHP에서 FTP 작업을 처리 할 때 UNIX 시스템의 LS -L 명령과 유사한 지정된 디렉토리에 대한 자세한 정보 목록을 얻을 수있는 매우 실용적인 도구입니다. 그러나 FTP 프로토콜 자체가 일반 텍스트 전송되므로 FTP_Rawlist ()를 사용할 때 보호되지 않으면 도난당하는 자격 증명, Man-in-the-Middle Attacks 등과 같은 심각한 보안 위험에 직면하게됩니다.이 기사는 FTP_Rawlist ()를 사용하여 정보를 얻을 때 연결 보안을 보장하는 방법을 탐색합니다.
처음부터 보안은 비판적 문제 중 하나였습니다. 표준 FTP 연결을 사용할 때 몇 가지 주요 보안 위험이 있습니다.
일반 텍스트 전송 계정 비밀번호 : 공격자는 네트워크 스니핑을 통해 로그인 자격 증명을 쉽게 가로 채울 수 있습니다.
데이터 전송이 암호화되지 않습니다 . 디렉토리 목록 및 파일 내용도 일반 텍스트로 전송됩니다.
MITM (Man-in-the-Middle Attacks)에 취약한 경우 : 검증 메커니즘이 없기 때문에 커뮤니케이션 내용을 변조 할 수 있습니다.
따라서 다음 코드를 직접 사용하면 위의 위험에 직면하게됩니다.
$conn = ftp_connect("gitbox.net");
$login = ftp_login($conn, "username", "password");
$list = ftp_rawlist($conn, "/");
print_r($list);
기존 FTP의 보안 문제를 해결하려면 FTP (FTP Secure)가 권장됩니다. FTPS는 SSL/TLS 암호화 계층을 FTP 프로토콜에 추가하여 일반 텍스트 전송으로 인한 정보 누출을 효과적으로 방지 할 수 있습니다.
PHP에서 FTP를 사용하는 것은 매우 간단합니다.
$conn = ftp_ssl_connect("gitbox.net");
if (!$conn) {
die("안전한 연결을 설정할 수 없습니다");
}
$login = ftp_login($conn, "username", "password");
if (!$login) {
die("로그인이 실패했습니다");
}
$list = ftp_rawlist($conn, "/");
print_r($list);
ftp_close($conn);
FTP_SSL_CONNECT ()는 암호화 된 연결을 설정하는 FTP_CONNECT () 에 대한 안전한 대안입니다. 이러한 방식으로 사용자 이름, 암호, 명령 및 데이터 전송은 TLS를 통해 암호화되어 통신 보안을 효과적으로 향상시킵니다.
FTP, 특히 FTPS를 사용할 때는 종종 연결 실패 문제가 발생합니다. 한 가지 일반적인 이유는 클라이언트와 서버가 데이터 채널을 차단하는 방화벽이 있기 때문입니다. 이 문제는 수동 모드를 활성화하여 해결할 수 있습니다.
ftp_pasv($conn, true);
수동 모드가 활성화되면 클라이언트가 데이터 연결을 시작하여 대부분의 방화벽 문제를 피할 수 있습니다.
FTP_SSL_CONNECT ()를 사용하는 경우 PHP는 기본적으로 서버 인증서를 확인하지 않습니다. 데이터가 암호화되지만 공격자는 여전히 서버를 위조 할 수 있습니다. 가능하면 하단의 인증서를 수동으로 확인하거나 프록시를 통해 문제를 해결하는 것이 좋습니다. PHP의 FTP 확장은 기본적으로 인증서 검증을 지원하지는 않지만 CURL (TLS/SSL을 통한 FTP 포함)과 같은 고급 라이브러리를보다 세분화하는 제어를 고려하십시오.
원격 파일 디렉토리 정보를 얻기 위해 FTP_RAWLIST ()를 사용하는 경우 FTP 프로토콜의 보안 위험을 무시하지 마십시오. 권장 보안 관행에는 다음이 포함됩니다.
ftp_connect () 대신 ftp_ssl_connect ()를 사용하십시오.
방화벽 제한을 우회하기 위해 항상 수동 모드를 켜십시오.
서버 인증서를 가능한 한 많이 확인하십시오.
생산 환경에서 암호화되지 않은 FTP 작업을 피하십시오.
위의 측정을 통해 FTP 운영으로 인한 보안 위험이 크게 줄어들 수 있으며 데이터 전송의 무결성과 기밀성을 보호 할 수 있습니다.