C# Communication avec les sockets - Sécurité
cocodu67...
Messages postés
3178
Date d'inscription
Statut
Membre
Dernière intervention
-
cocodu67... Messages postés 3178 Date d'inscription Statut Membre Dernière intervention -
cocodu67... Messages postés 3178 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
C'est encore moi :)
J'ai terminé mes applications mais je n'avais pas pensé à la sécurité dans mon utilisation des sockets afin de transférer des images entre deux ordinateurs.
Le client (celui qui envoie des données) utilise cette classe :
Le serveur (celui qui reçoit les images) utilise cette classe :
Le problème c'est que n'importe quelle application peut établir une connexion et envoyer des fichiers vers le serveur à partir du moment où l'IP du serveur est connue par la personne mal intentionnée.
J'aimerais donc savoir s'il y a la possibilité de sécuriser tout cela.
Merci d'avance de votre aide
C'est encore moi :)
J'ai terminé mes applications mais je n'avais pas pensé à la sécurité dans mon utilisation des sockets afin de transférer des images entre deux ordinateurs.
Le client (celui qui envoie des données) utilise cette classe :
public class FTClientCode { public static string sIpAEnvoyer; // L'adresse IP vers laquelle envoyer l'image est récupérée dans la base de données public static string MessageClient = "Prêt"; public static void SendFile(string fileName) { try { IPAddress[] ipAddress = Dns.GetHostAddresses(sIpAEnvoyer); IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656); Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); string filePath = ""; fileName = fileName.Replace("\\", "/"); // Si le chemin pour accéder à la photo contient des \\ ils seront remplacés par / while (fileName.IndexOf("/") > -1) { filePath += fileName.Substring(0, fileName.IndexOf("/") + 1); fileName = fileName.Substring(fileName.IndexOf("/") + 1); } byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); if (fileNameByte.Length > 200 * 1024) // Pour envoyer des images jusqu'à 200 kb { MessageClient = "Le fichier est plus lourd que 200 kb, merci de réessayer avec un autre"; return; } MessageClient = "En cours ..."; byte[] fileData = File.ReadAllBytes(filePath + fileName); // Stock l'image en bytes byte[] clientData = new byte[10000000 + fileNameByte.Length + fileData.Length]; // Nom de bytes pour stocker l'image, si trop bas l'image est transférée mais pas en entier byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData, 4); fileData.CopyTo(clientData, 4 + fileNameByte.Length); MessageClient = "Connexion au serveur ..."; clientSock.Connect(ipEnd); MessageClient = "Envoie du fichier ..."; clientSock.Send(clientData); MessageClient = "Déconnexion ..."; clientSock.Close(); MessageClient = "Fichier transféré."; } catch (Exception ex) { if (ex.Message == "Aucune connexion. Il se peut que le PC cible la refuse") MessageClient = "Erreur lors de l'envoie du fichier car le serveur n'est pas lancé."; else MessageClient = "Erreur lors de l'envoie du fichier." + ex.Message; } } }
Le serveur (celui qui reçoit les images) utilise cette classe :
public class FTServerCode { IPEndPoint ipEnd; Socket sock; public FTServerCode() { ipEnd = new IPEndPoint(IPAddress.Any, 5655); sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); sock.Bind(ipEnd); } public static string receivedPath = @"..\..\photos"; public static string MessageServeur = "Arrêté"; public void StartServer() { try { MessageServeur = "Démarrage..."; sock.Listen(100); MessageServeur = "Lancé et en attente de la réception d'un fichier."; Socket clientSock = sock.Accept(); byte[] clientData = new byte[1024 * 200]; // Défini la taille de l'image après le transfère int receivedBytesLen = clientSock.Receive(clientData); MessageServeur = "Données en cours de réception..."; int fileNameLen = BitConverter.ToInt32(clientData, 0); string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen); BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Append)); ; bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen); MessageServeur = "Enregistrement du fichier ..."; bWrite.Close(); clientSock.Close(); MessageServeur = "Fichier reçut et enregistré. Serveur arrêté."; } catch { MessageServeur = "Erreur lors de la réception du fichier."; } } }
Le problème c'est que n'importe quelle application peut établir une connexion et envoyer des fichiers vers le serveur à partir du moment où l'IP du serveur est connue par la personne mal intentionnée.
J'aimerais donc savoir s'il y a la possibilité de sécuriser tout cela.
Merci d'avance de votre aide
A voir également:
- C# Communication avec les sockets - Sécurité
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Mode securite - Guide
- Une erreur de communication est détectée dans le module de sécurité - Forum Jeux vidéo
- Clé de sécurité windows 10 gratuit - Guide