Sicherheitsmaßnahmen zum Schreiben von Netzwerkprogrammen in Delphi
Die MIDAS-Steuerung von Delphi bietet eine sehr praktische Möglichkeit zum Schreiben von Netzwerkprogrammen. Mit diesen Steuerelementen können Sie Client/Server-Systemprogramme im lokalen Netzwerk schreiben und auch problemlos verteilte Verarbeitungsanwendungen im Internet erstellen.
Ein wichtiger Punkt bei Netzwerkprogrammen sind Sicherheitsüberlegungen. Einige sensible Daten werden online übertragen und können illegal abgefangen werden, was zu unnötigen Verlusten führt. Im eigentlichen Programmierprozess habe ich einige wirksame Präventivmaßnahmen ergriffen, die ich hier kurz vorstellen werde.
1. Prinzip
Derzeit gibt es viele Methoden zur Datenverschlüsselung, die beim Datenschutz eine gewisse Rolle spielen. Wenn jedoch ein fester Schlüssel verwendet wird oder der Schlüssel zusammen mit den Daten übertragen wird, können keine zufriedenstellenden Vertraulichkeitsergebnisse erzielt werden. In der Praxis habe ich eine Reihe von Zufallsschlüsselmethoden im „Anfrage-Antwort“-Modus herausgefunden, die für die Geheimhaltung von Passwörtern und Daten sehr zufriedenstellend sind.
Wenn das Client-Programm startet und versucht, eine Verbindung mit dem Server-Programm herzustellen, erhält das Client-Programm eine vom Server-Programm generierte Zufallszeichenfolge. Das System verwendet diese Zeichenfolge als Schlüssel zur Übertragung des Anmeldekennworts und der Daten des Benutzers. Da der Schlüssel zufällig vom Serverprogramm generiert wird, ist der Schlüssel jedes Mal anders, wenn sich der Kunde anmeldet, wodurch die Möglichkeit des Abfangens von Passwörtern, die zu Datendiebstahl führt, erheblich verringert wird.
Der Server kann im Remote-Datenmodul eine benutzerdefinierte Schnittstelle einführen, die eine zufällige Zeichenfolge zurückgibt. Das Remote-Datenmodul sollte diese Zeichenfolge als Schlüssel für die nachfolgende Verarbeitung aufzeichnen. Zufällige Zeichenfolgen können auf verschiedene Arten generiert werden. Die einfachste Methode besteht darin, mit der Funktion „Random()“ eine Zufallszahl zu generieren und dann mit der Funktion „Format()“ oder „IntToStr()“ eine Zeichenfolge aus dieser Zahl zu generieren.
2. Maßnahmen zur Benutzeranmeldung
Um zu verhindern, dass das Programm illegal debuggt wird und dadurch das Passwort verloren geht, müssen die Anmeldeinformationen des Kunden serverseitig verarbeitet werden, oder es kann eine Sicherheitsschicht hinzugefügt werden, die speziell für die Anmeldung des Kunden verantwortlich ist. Die Anmeldeinformationen des Kunden werden in der Kundeninformationstabelle gespeichert, einschließlich Benutzername, Passwort, Berechtigungen und anderer Informationen.
Wenn sich das Client-Programm anmeldet, ruft es zunächst die Schnittstelle des Serverprogramms auf, um die Schlüsselzeichenfolge abzurufen. Mit diesem Schlüssel verschlüsselt es den vom Benutzer eingegebenen Benutzernamen und das Kennwort und sendet die Anmeldeinformationen an den Server. Der Verschlüsselungsalgorithmus kann ein DES-Algorithmus oder ein anderer effektiver Algorithmus sein. Nach Erhalt der Anmeldeinformationen entschlüsselt der Server zunächst die Anmeldeinformationen mit dem zuvor generierten und aufgezeichneten Zufallsschlüssel und vergleicht dann die entschlüsselten Informationen mit den Informationen in der gespeicherten Kundeninformationstabelle, um festzustellen, ob die Kundeninformationen legal sind und ob die Datenberechtigungen des Kunden zulässig sind genossen usw.
Das Client-Programm für diesen Prozess lautet wie folgt:
strKey:=myRemoteSever.GetKey();
{Aufrufen der Serverschnittstelle, um einen zufälligen Schlüssel zu erhalten}
Benutzername:=Ency(strUserName
strKey);
{Verschlüsseln Sie den Benutzernamen, Ency() ist der Verschlüsselungsalgorithmus}
PassWord:=Ency(strPassword
strKey);
{Login-Passwort verschlüsseln}
Wenn myRemoteServer.LogIn(Benutzername
Passwort), dann {Login}
Beginnen
{Verfahren}
Ende;
Der serverseitige Anmeldevorgang LogIn() läuft wie folgt ab:
strUserName:=DeEncy(Benutzername
strKey);
{Benutzernamen entschlüsseln, DeEncy() ist der Entschlüsselungsalgorithmus}
strPassword:=DeEncy(Passwort
strKey);
{Login-Passwort entschlüsseln}
{Datenbank abfragen}
wenn (Bestanden) dann
Ergebnis:=wahr
Anders
Ergebnis:=false;
Es ist zu beachten, dass StrKey sowohl im Serverprogramm als auch im Clientprogramm als globale Variable definiert werden sollte.
Um zu verhindern, dass die Kundeninformationstabelle außerhalb des Programms geöffnet wird und dadurch das Passwort verloren geht, können bestimmte Verschlüsselungsmaßnahmen für die Kundeninformationen implementiert werden. Beispielsweise kann der PARADOX-Tabelle ein Passwort hinzugefügt werden, das das Serverprogramm zunächst bereitstellt das Passwort beim Zugriff auf die Kundeninformationstabelle.
3. Datenübertragung
Bei Netzwerkanwendungen müssen einige sensible Daten bei der Übertragung über das Internet verschlüsselt werden. Der MIDAS-Mechanismus von Delphi bietet eine Möglichkeit zum Verschlüsseln von Daten. Er kann einige Felder verschlüsseln, bevor die Daten an den Client übertragen werden. Er kann auch die entsprechenden Felder der Daten vom Client entschlüsseln, nachdem er die Aktualisierungsdatenanforderung des Clients erhalten hat, bevor er diese an die Datenbank sendet . Machen Sie ein Update. Um diese Ziele zu erreichen, können Sie dem Remote-Datenmodul des Serverprogramms ein TPRovider- oder TdataSetProvider-Objekt hinzufügen und die DataSet-Eigenschaft dieses Objekts auf den zu verarbeitenden Datensatz festlegen. Fügen Sie dem OnGetData-Ereignis von Tprovider den folgenden Code hinzu:
mit DataSet tun
beginnen
während nicht EOF tun
beginnen
Bearbeiten;
SensitiveData.AsString :=
Ency(SensitiveData.AsString
strKey);
{Sensible Daten verschlüsseln}
Post;
Nächste;
Ende;
Ende;
Der obige Code kann vertrauliche Daten verschlüsseln, bevor er sie an das Clientprogramm sendet.
Ebenso können durch Hinzufügen von Verarbeitungscode zum OnUpdateData-Ereignis von Tprovider die vom Client gesendeten Daten entschlüsselt werden.
Das Obige führt lediglich die allgemeinen Grundsätze der Implementierung von Sicherheitsmaßnahmen für Netzwerkprogramme ein. Auf dieser Grundlage können weitere Vertraulichkeitsmaßnahmen hinzugefügt werden, um bessere Vertraulichkeitseffekte zu erzielen. Beispielsweise kann ein Client-Programm bestimmte zusätzliche Hardwaregeräte verwenden, um die Sicherheit zu erhöhen. In der Smartcard-Anwendung verlangt das Client-Programm nicht nur, dass der Benutzer beim Anmelden den Benutzernamen und das Passwort eingibt, das Programm überprüft auf diese Weise auch den Typ und den spezifischen Inhalt der IC-Karte im IC-Leser Wenn das Passwort durchgesickert ist, wird sich niemand anmelden. Natürlich ist keine Sicherheitsmaßnahme absolut sicher. Um die Vertraulichkeit wirklich zu wahren, müssen Sicherheitsmaßnahmen über ein strenges Vertraulichkeitssystem und ein hohes Maß an Vertraulichkeitsbewusstsein seitens der Benutzer verfügen.