Dans PHP, FTP_NB_GET est une fonction très utile pour télécharger des fichiers à partir d'un serveur FTP non bloquant. Contrairement au blocage FTP_GET , FTP_NB_GET vous permet d'effectuer d'autres opérations pendant le processus de téléchargement pour améliorer la réactivité et l'efficacité du programme. Cependant, lorsque nous sommes confrontés à des fichiers FTP cryptés, comment télécharger et assurer l'intégrité et la confidentialité des fichiers nécessitent un traitement supplémentaire.
Cet article introduira en détail comment utiliser la fonction FTP_NB_GET PHP pour réaliser un téléchargement sécurisé des fichiers FTP cryptés, avec la focalisation:
Processus de téléchargement non bloquant à l'aide de ftp_nb_get
Combiné avec SSL / TLS pour assurer la sécurité de la transmission FTP
Décrypter le fichier téléchargé
Empêcher la falsification des données et la gestion des erreurs
FTP_NB_GET est une fonction de téléchargement non bloquante dans l'extension FTP PHP. L'utilisation est essentiellement la suivante:
<?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) {
// D'autres choses peuvent être faites ici
$ret = ftp_nb_continue($conn);
}
if ($ret == FTP_FINISHED) {
echo "Télécharger terminé\n";
} else {
echo "Échec du téléchargement\n";
}
ftp_close($conn);
?>
Le code ci-dessus montre le processus de téléchargement de base non bloquant. La clé est de sonder FTP_NB_CONTINUE pour continuer à télécharger jusqu'à ce qu'il soit terminé.
La transmission FTP ordinaire est du texte brut et les fichiers sont facilement interceptés sur le réseau. Afin de télécharger en toute sécurité les fichiers FTP cryptés, il est nécessaire de s'assurer que le transfert lui-même est crypté. Deux pratiques courantes:
L'extension FTP de PHP prend en charge FTPS, et vous pouvez utiliser ftp_ssl_connect au lieu de ftp_connect :
<?php
$conn = ftp_ssl_connect("m66.net"); // passer SSL connecter FTP serveur
ftp_login($conn, "username", "password");
// Le reste des opérations est le même que ci-dessus
?>
De cette façon, le processus de transmission est chiffré par SSL / TLS pour éviter les attaques d'homme dans le milieu.
SFTP est un protocole de transfert de fichiers basé sur SSH, qui est plus sécurisé. Cependant, l'extension FTP native PHP ne prend pas en charge SFTP et nécessite l'utilisation d'extensions SSH2 ou de bibliothèques tierces. Je ne le développerai pas ici.
En supposant que le fichier sur le serveur a été crypté (par exemple, en utilisant le cryptage symétrique AES), vous devez utiliser la clé correspondante pour le décrypter après le téléchargement. L'exemple utilise OpenSSL:
<?php
$encrypted_file = "local_encrypted_file.dat";
$decrypted_file = "local_decrypted_file.dat";
$key = "your-secret-key-123"; // Clé symétrique
$iv = "your-16byteivvector"; // Vecteur initial
$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("Le décryptage a échoué");
}
file_put_contents($decrypted_file, $decrypted_data);
echo "Décryptage de fichiers avec succès\n";
?>
Avis:
La clé et IV doivent être cohérentes avec le cryptage
La gestion clé doit être sécurisée et ne peut pas être stockée en texte brut
<?php
$conn = ftp_ssl_connect("m66.net");
if (!$conn) {
die("无法connecter到 FTP serveur");
}
if (!ftp_login($conn, "username", "password")) {
ftp_close($conn);
die("La connexion a échoué");
}
ftp_pasv($conn, true); // Activer le mode passif,Plus adapté aux environnements de pare-feu
$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) {
// Ici, vous pouvez ajouter un affichage de progression ou une autre logique
$ret = ftp_nb_continue($conn);
}
if ($ret != FTP_FINISHED) {
ftp_close($conn);
die("Échec du téléchargement");
}
ftp_close($conn);
echo "Télécharger terminé,Commencer le décryptage...\n";
// Décrypter les paramètres
$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("Le décryptage a échoué");
}
$local_decrypted = "local_decrypted_file.dat";
file_put_contents($local_decrypted, $decrypted_data);
echo "Le fichier a été déchiffré et enregistré avec succès à $local_decrypted\n";
?>
Utilisez FTP_SSL_CONNECT pour assurer le chiffrement de la transmission et éviter les attaques de l'homme au milieu
Utilisez ftp_nb_get pour obtenir des téléchargements non bloquants pour améliorer l'efficacité et l'expérience utilisateur
Après le téléchargement, utilisez OpenSSL pour décrypter des fichiers pour assurer la confidentialité des données
Gérez correctement les clés et les vecteurs initiaux pour éviter les fuites
Activer le mode passif ( FTP_PASV ) pour résoudre les problèmes de compatibilité des environnements réseau
De cette façon, vous pouvez utiliser PHP pour télécharger et traiter les fichiers FTP cryptés en toute sécurité et stable.