Mesures de sécurité pour l'écriture de programmes réseau dans Delphi
Le contrôle MIDAS de Delphi fournit un moyen très pratique pour écrire des programmes réseau. À l’aide de ces contrôles, vous pouvez écrire des programmes système client/serveur sur le réseau local et vous pouvez également créer facilement des applications de traitement distribué sur Internet.
Un problème important avec les programmes réseau concerne les considérations de sécurité. Certaines données sensibles sont transmises en ligne et peuvent être interceptées illégalement, entraînant des pertes inutiles. Au cours du processus de programmation proprement dit, j'ai pris des mesures préventives efficaces, que je présenterai brièvement ici.
1. Principe
Il existe actuellement de nombreuses méthodes de cryptage des données qui jouent un certain rôle dans la protection des données. Cependant, si une clé fixe est utilisée ou si la clé est transmise avec les données, des résultats de confidentialité satisfaisants ne peuvent pas être obtenus. En pratique, j'ai trouvé un ensemble de méthodes de clé aléatoire en mode "requête-réponse", ce qui est très satisfaisant pour garder les mots de passe et les données confidentielles.
Lorsque le programme client démarre et tente d'établir une connexion avec le programme serveur, le programme client obtient une chaîne aléatoire générée par le programme serveur à partir du serveur. Le système utilisera cette chaîne comme clé pour transmettre le mot de passe et les données de connexion de l'utilisateur. Étant donné que la clé est générée de manière aléatoire par le programme serveur, la clé est différente à chaque fois que le client se connecte, réduisant ainsi considérablement la possibilité d'interception de mot de passe conduisant au vol de données.
Le serveur peut introduire une interface personnalisée dans le module de données distant, qui renvoie une chaîne aléatoire. Le module de données distant doit enregistrer cette chaîne comme clé pour le traitement ultérieur. Les chaînes aléatoires peuvent être générées de différentes manières. La méthode la plus simple consiste à utiliser la fonction Random() pour générer un nombre aléatoire, puis à utiliser la fonction Format() ou IntToStr() pour générer une chaîne à partir de ce nombre.
2. Mesures de connexion des utilisateurs
Afin d'empêcher le débogage illégal du programme et ainsi la fuite du mot de passe, les informations de connexion du client doivent être traitées côté serveur, ou une couche de sécurité peut être ajoutée spécifiquement pour être responsable de la connexion du client. Les informations de connexion du client sont stockées dans le tableau d'informations client, y compris le nom d'utilisateur, le mot de passe, les autorisations et d'autres informations.
Lorsque le programme client se connecte, il appelle d'abord l'interface du programme serveur pour obtenir la chaîne de clé, utilise cette clé pour crypter le nom d'utilisateur et le mot de passe saisis par l'utilisateur et envoie les informations de connexion au serveur. L'algorithme de chiffrement peut être un algorithme DES ou un autre algorithme efficace. Après avoir reçu les informations de connexion, le serveur décrypte d'abord les informations de connexion avec la clé aléatoire générée et enregistrée précédemment, puis compare les informations déchiffrées avec les informations dans la table d'informations client stockée pour déterminer si les informations client sont légales et les autorisations de données du client. apprécié, etc.
Le programme client pour ce processus est le suivant :
strKey:=myRemoteSever.GetKey();
{Appel de l'interface du serveur pour obtenir une clé aléatoire}
Nom d'utilisateur : = Ency (strUserName
strKey);
{Cryptez le nom d'utilisateur, Ency() est l'algorithme de cryptage}
Mot de passe :=Ency(strMot de passe
strKey);
{Crypter le mot de passe de connexion}
Si myRemoteServer.LogIn(UserName
Mot de passe) puis {Connexion}
Commencer
{processus}
Fin;
Le processus de connexion côté serveur LogIn() est le suivant :
strUserName:=DeEncy(Nom d'utilisateur
strKey);
{Décrypter le nom d'utilisateur, DeEncy() est l'algorithme de décryptage}
strPassword:=DeEncy(Mot de passe
strKey);
{Déchiffrer le mot de passe de connexion}
{Base de données de requête}
si (Réussir) alors
Résultat :=vrai
Autre
Résultat :=faux ;
Il convient de noter que StrKey doit être défini comme une variable globale à la fois dans le programme serveur et dans le programme client.
Afin d'empêcher l'ouverture de la table d'informations client en dehors du programme et ainsi la fuite du mot de passe, certaines mesures de cryptage peuvent être mises en œuvre sur les informations client. Par exemple, un mot de passe peut être ajouté à la table PARADOX, et le programme serveur le fournit d'abord. le Mot de passe lors de l'accès au tableau d'informations client.
3. Transmission des données
Dans les applications réseau, certaines données sensibles doivent être cryptées lors de leur transmission sur Internet. Le mécanisme MIDAS de Delphi fournit un moyen de chiffrer les données. Il peut chiffrer certains champs avant que les données ne soient transmises au client. Il peut également déchiffrer les champs correspondants des données du client après avoir reçu la demande de mise à jour des données du client avant de l'envoyer à la base de données. . Effectuez une mise à jour. Afin d'atteindre ces objectifs, vous pouvez ajouter un objet TPRovider ou TdataSetProvider au module de données distant du programme serveur et définir la propriété DataSet de cet objet sur l'ensemble de données à traiter. Ajoutez le code suivant à l'événement OnGetData de Tprovider :
avec DataSet faire
commencer
bien que ce ne soit pas EOF
commencer
Modifier;
SensitiveData.AsString :=
Ency(SensitiveData.AsString
strKey);
{Crypter les données sensibles}
Poste;
Suivant;
fin;
fin;
Le code ci-dessus peut crypter les données sensibles avant de les envoyer au programme client.
De même, l'ajout de code de traitement à l'événement OnUpdateData de Tprovider peut décrypter les données envoyées par le client.
Ce qui précède présente uniquement les principes généraux de mise en œuvre des mesures de sécurité pour les programmes réseau. Sur cette base, d'autres mesures de confidentialité peuvent être ajoutées pour obtenir de meilleurs effets de confidentialité. Par exemple, un programme client peut utiliser des périphériques matériels auxiliaires spécifiques pour accroître la sécurité. Dans l'application de carte à puce, le programme client demande non seulement à l'utilisateur de saisir son nom d'utilisateur et son mot de passe lors de la connexion, mais le programme vérifie également le type et le contenu spécifique de la carte IC dans le lecteur IC, même si elle est présente. le mot de passe est divulgué, personne ne se connectera en usurpation d'identité. Bien entendu, aucune mesure de sécurité n’est absolument sûre. Les mesures de sécurité doivent s’appuyer sur un système de confidentialité strict et un degré élevé de sensibilisation à la confidentialité de la part des utilisateurs pour réellement maintenir la confidentialité.