In PHP ist FTP_NB_get eine sehr nützliche Funktion zum Herunterladen von Dateien von einem nicht blockierenden FTP-Server. Im Gegensatz zum Blockieren von FTP_get können Sie mit FTP_NB_get andere Vorgänge während des Download -Prozesses ausführen, um die Reaktionsfähigkeit und Effizienz der Programme zu verbessern. Wenn wir jedoch mit verschlüsselten FTP -Dateien konfrontiert sind, müssen die Integrität und Vertraulichkeit von Dateien sicher heruntergeladen und sichergestellt werden, dass eine zusätzliche Verarbeitung erforderlich ist.
In diesem Artikel wird detailliert eingeführt, wie die Funktion FTP_NB_GE von PHP mit dem Fokus einen sicheren Download von verschlüsselten FTP -Dateien verwendet wird:
Nicht blockierter Downloadprozess mit FTP_NB_get
In Kombination mit SSL/TLS, um die Sicherheit der FTP -Übertragung zu gewährleisten
Entschlüsseln Sie die heruntergeladene Datei
Verhindern Sie die Manipulation von Daten und Fehlerbehandlung
ftp_nb_get ist eine nicht blockierende Download-Funktion in der PHP-FTP-Erweiterung. Die Verwendung ist im Grunde wie folgt:
<?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) {
// Andere Dinge können hier getan werden
$ret = ftp_nb_continue($conn);
}
if ($ret == FTP_FINISHED) {
echo "Download abgeschlossen\n";
} else {
echo "Download fehlgeschlagen\n";
}
ftp_close($conn);
?>
Der obige Code zeigt den grundlegenden nicht blockierenden Download-Prozess an. Der Schlüssel ist, ftp_nb_continue zu befragen, um weiter herunterzuladen, bis es fertig ist.
Die gewöhnliche FTP -Übertragung ist einfacher Text, und Dateien können leicht in das Netzwerk abgefangen. Um verschlüsselte FTP -Dateien sicher herunterzuladen, muss sichergestellt werden, dass der Übertragung selbst verschlüsselt ist. Zwei gängige Praktiken:
Die FTP -Erweiterung von PHP unterstützt FTPS und Sie können FTP_SSL_CONNECT anstelle von ftp_connect verwenden:
<?php
$conn = ftp_ssl_connect("m66.net"); // passieren SSL verbinden FTP Server
ftp_login($conn, "username", "password");
// Der Rest der Operationen ist der gleiche wie oben
?>
Auf diese Weise wird der Übertragungsprozess von SSL/TLS verschlüsselt, um Man-in-the-Middle-Angriffe zu vermeiden.
SFTP ist ein Dateiübertragungsprotokoll basierend auf SSH, das sicherer ist. Die PHP Native FTP-Erweiterung unterstützt jedoch keine SFTP und erfordert die Verwendung von SSH2- Erweiterungen oder Bibliotheken von Drittanbietern. Ich werde es hier nicht erweitern.
Unter der Annahme, dass die Datei auf dem Server verschlüsselt wurde (z. B. mithilfe der symmetrischen Verschlüsselung von AES), müssen Sie den entsprechenden Schlüssel nach dem Herunterladen entschlüsseln. Das Beispiel verwendet OpenSSL:
<?php
$encrypted_file = "local_encrypted_file.dat";
$decrypted_file = "local_decrypted_file.dat";
$key = "your-secret-key-123"; // Symmetrischer Schlüssel
$iv = "your-16byteivvector"; // Anfangsvektor
$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("Die Entschlüsselung fehlgeschlagen");
}
file_put_contents($decrypted_file, $decrypted_data);
echo "Datei entschlüsselt erfolgreich\n";
?>
Beachten:
Der Schlüssel und die IV müssen mit der Verschlüsselung übereinstimmen
Das Schlüsselmanagement muss sicher sein und kann nicht einfacher Text gespeichert werden
<?php
$conn = ftp_ssl_connect("m66.net");
if (!$conn) {
die("无法verbinden到 FTP Server");
}
if (!ftp_login($conn, "username", "password")) {
ftp_close($conn);
die("Fehler bei der Anmeldung");
}
ftp_pasv($conn, true); // Aktivieren Sie den passiven Modus,Besser geeignet für Firewall -Umgebungen
$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) {
// Hier können Sie Fortschrittsanzeige oder andere Logik hinzufügen
$ret = ftp_nb_continue($conn);
}
if ($ret != FTP_FINISHED) {
ftp_close($conn);
die("Download fehlgeschlagen");
}
ftp_close($conn);
echo "Download abgeschlossen,Entschlüsselung beginnen...\n";
// Parameter entschlüsseln
$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("Die Entschlüsselung fehlgeschlagen");
}
$local_decrypted = "local_decrypted_file.dat";
file_put_contents($local_decrypted, $decrypted_data);
echo "Die Datei wurde erfolgreich entschlüsselt und gespeichert $local_decrypted\n";
?>
Verwenden Sie FTP_SSL_CONNECT, um die Übertragungsverschlüsselung sicherzustellen, und vermeiden Sie Man-in-the-Middle-Angriffe
Verwenden Sie FTP_NB_get , um nicht blockierende Downloads zu erreichen, um die Effizienz und die Benutzererfahrung zu verbessern
Verwenden Sie nach dem Herunterladen OpenSSL, um Dateien zu entschlüsseln, um die Vertraulichkeit der Daten zu gewährleisten
Verwalten Sie Schlüssel und anfängliche Vektoren ordnungsgemäß, um Leckagen zu vermeiden
Aktivieren Sie den passiven Modus ( FTP_PASV ), um die Kompatibilitätsprobleme der Netzwerkumgebung zu lösen
Auf diese Weise können Sie PHP verwenden, um verschlüsselte FTP -Dateien sicher und stabil herunterzuladen und zu verarbeiten.