Medidas de seguridad para escribir programas de red en Delphi
El control MIDAS de Delphi proporciona un medio muy conveniente para escribir programas de red. Con estos controles, puede escribir programas de sistema cliente/servidor en la red de área local y también puede crear fácilmente aplicaciones de procesamiento distribuido en Internet.
Un tema importante con los programas de red son las consideraciones de seguridad. Algunos datos confidenciales se transmiten en línea y pueden ser interceptados ilegalmente, provocando pérdidas innecesarias. En el proceso de programación real, tomé algunas medidas preventivas efectivas, que presentaré brevemente aquí.
1. Principio
Actualmente, existen muchos métodos de cifrado de datos que desempeñan un papel determinado en la protección de datos. Sin embargo, si se utiliza una clave fija o la clave se transmite junto con los datos, no se pueden lograr resultados de confidencialidad satisfactorios. En la práctica, descubrí un conjunto de métodos de clave aleatoria en el modo "solicitud-respuesta", que es muy satisfactorio para mantener la confidencialidad de contraseñas y datos.
Cuando el programa cliente se inicia e intenta establecer una conexión con el programa servidor, el programa cliente obtiene una cadena aleatoria generada por el programa servidor del servidor. El sistema utilizará esta cadena como clave para transmitir la contraseña y los datos de inicio de sesión del usuario. Dado que la clave es generada aleatoriamente por el programa del servidor, la clave es diferente cada vez que el cliente inicia sesión, lo que reduce en gran medida la posibilidad de que la interceptación de la contraseña conduzca al robo de datos.
El servidor puede introducir una interfaz personalizada en el módulo de datos remoto, que devuelve una cadena aleatoria. El módulo de datos remoto debe registrar esta cadena como clave para el procesamiento posterior. Hay muchas formas de generar cadenas aleatorias. El método más simple es usar la función Random() para generar un número aleatorio y luego usar la función Format() o IntToStr() para generar una cadena a partir de este número.
2. Medidas de inicio de sesión del usuario
Para evitar que el programa se depure ilegalmente y, por lo tanto, se filtre la contraseña, la información de inicio de sesión del cliente debe procesarse en el lado del servidor o se puede agregar una capa de seguridad específicamente para que sea responsable del inicio de sesión del cliente. La información de inicio de sesión del cliente se almacena en la tabla de información del cliente, incluido el nombre de usuario, la contraseña, los permisos y otra información.
Cuando el programa cliente inicia sesión, primero llama a la interfaz del programa servidor para obtener la cadena de clave y utiliza esta clave para cifrar el nombre de usuario y la contraseña ingresados por el usuario y envía la información de inicio de sesión al servidor. El algoritmo de cifrado puede ser un algoritmo DES u otro algoritmo eficaz. Después de que el servidor recibe la información de inicio de sesión, primero descifra la información de inicio de sesión con la clave aleatoria generada y registrada previamente, y luego compara la información descifrada con la información en la tabla de información del cliente almacenada para determinar si la información del cliente es legal y los datos del cliente. permisos disfrutados, etc.
El programa cliente para este proceso es el siguiente:
strKey:=myRemoteSever.GetKey();
{Llamar a la interfaz del servidor para obtener una clave aleatoria}
Nombre de usuario:=Ency(strNombre de usuario
strKey);
{Cifre el nombre de usuario, Ency() es el algoritmo de cifrado}
Contraseña:=Ency(strContraseña
strKey);
{Cifrar contraseña de inicio de sesión}
Si myRemoteServer.LogIn(Nombre de usuario
Contraseña) y luego {Iniciar sesión}
Comenzar
{proceso}
Fin;
El proceso de inicio de sesión del lado del servidor LogIn() es el siguiente:
strUserName:=DeEncy(Nombre de usuario
strKey);
{Descifrar nombre de usuario, DeEncy() es el algoritmo de descifrado}
strContraseña:=DeEncy(Contraseña
strKey);
{Descifrar contraseña de inicio de sesión}
{Consultar base de datos}
si (pasa) entonces
Resultado:=verdadero
Demás
Resultado:=falso;
Cabe señalar que StrKey debe definirse como una variable global tanto en el programa servidor como en el programa cliente.
Para evitar que la tabla de información del cliente se abra fuera del programa y, por lo tanto, se filtre la contraseña, se pueden implementar ciertas medidas de cifrado en la información del cliente. Por ejemplo, se puede agregar una contraseña a la tabla PARADOX y el programa del servidor la proporciona primero. la Contraseña al acceder a la tabla de información del cliente.
3. Transmisión de datos
En las aplicaciones de red, algunos datos confidenciales deben cifrarse cuando se transmiten a través de Internet. El mecanismo MIDAS de Delphi proporciona una forma de cifrar datos. Puede cifrar algunos campos antes de que los datos se transmitan al cliente. También puede descifrar los campos correspondientes de los datos del cliente después de recibir la solicitud de actualización de datos del cliente antes de enviarlos a la base de datos. .Haz una actualización. Para lograr estos objetivos, puede agregar un objeto TPRovider o TdataSetProvider al módulo de datos remoto del programa del servidor y establecer la propiedad DataSet de este objeto en el conjunto de datos que se procesará. Agregue el siguiente código al evento OnGetData de Tprovider:
con DataSet hacer
comenzar
mientras que no EOF lo hace
comenzar
Editar;
SensitiveData.AsString :=
Ency(SensitiveData.AsString
strKey);
{Cifrar datos confidenciales}
Correo;
Próximo;
fin;
fin;
El código anterior puede cifrar datos confidenciales antes de enviarlos al programa cliente.
De manera similar, agregar algún código de procesamiento al evento OnUpdateData de Tprovider puede descifrar los datos enviados por el cliente.
Lo anterior solo presenta los principios generales de implementación de medidas de seguridad del programa de red. Sobre esta base, se pueden agregar otras medidas de confidencialidad para lograr mejores efectos de confidencialidad. Por ejemplo, un programa cliente puede utilizar dispositivos de hardware auxiliares específicos para aumentar la seguridad. En la aplicación de tarjeta inteligente, el programa cliente no solo requiere que el usuario ingrese el nombre de usuario y la contraseña al iniciar sesión, sino que también verifica el tipo y el contenido específico de la tarjeta IC en el lector IC. Se filtra la contraseña, nadie iniciará sesión en suplantación. Por supuesto, ninguna medida de seguridad es absolutamente segura. Las medidas de seguridad deben contar con un estricto sistema de confidencialidad y un alto grado de conciencia de confidencialidad por parte de los usuarios para mantener verdaderamente la confidencialidad.