Medidas de segurança para escrever programas de rede em Delphi
O controle MIDAS do Delphi fornece um meio muito conveniente para escrever programas de rede. Usando esses controles, você pode escrever programas de sistema cliente/servidor na rede local e também criar facilmente aplicativos de processamento distribuído na Internet.
Uma questão importante com programas de rede são as considerações de segurança. Alguns dados sensíveis são transmitidos online e podem ser interceptados ilegalmente, causando perdas desnecessárias. No próprio processo de programação, tomei algumas medidas preventivas eficazes, que apresentarei aqui brevemente.
1. Princípio
Atualmente, existem muitos métodos de criptografia de dados, que desempenham um determinado papel na proteção de dados. No entanto, se for utilizada uma chave fixa ou se a chave for transmitida juntamente com os dados, não poderão ser alcançados resultados de confidencialidade satisfatórios. Na prática, descobri um conjunto de métodos de chave aleatória no modo "solicitação-resposta", que é muito satisfatório para manter a confidencialidade de senhas e dados.
Quando o programa cliente é iniciado e tenta estabelecer uma conexão com o programa servidor, o programa cliente obtém do servidor uma string aleatória gerada pelo programa servidor. O sistema usará essa string como uma chave para transmitir a senha e os dados de login do usuário. Como a chave é gerada aleatoriamente pelo programa do servidor, a chave é diferente toda vez que o cliente faz login, reduzindo bastante a possibilidade de interceptação de senha, levando ao roubo de dados.
O servidor pode introduzir uma interface personalizada no módulo de dados remoto, que retorna uma string aleatória. O módulo de dados remoto deve registrar esta sequência como chave para processamento subsequente. Existem muitas maneiras de gerar strings aleatórias. O método mais simples é usar a função Random() para gerar um número aleatório e, em seguida, usar a função Format() ou IntToStr() para gerar uma string a partir desse número.
2. Medidas de login do usuário
Para evitar que o programa seja depurado ilegalmente e, assim, vaze a senha, as informações de login do cliente devem ser processadas no lado do servidor, ou uma camada de segurança pode ser adicionada especificamente para ser responsável pelo login do cliente. As informações de login do cliente são armazenadas na tabela de informações do cliente, incluindo nome de usuário, senha, permissões e outras informações.
Quando o programa cliente efetua login, ele primeiro chama a interface do programa servidor para obter a sequência de chaves e usa essa chave para criptografar o nome de usuário e a senha inseridos pelo usuário e envia as informações de login ao servidor. O algoritmo de criptografia pode ser o algoritmo DES ou outro algoritmo eficaz. Depois que o servidor recebe as informações de login, ele primeiro descriptografa as informações de login com a chave aleatória gerada e registrada anteriormente e, em seguida, compara as informações descriptografadas com as informações na tabela de informações do cliente armazenada para determinar se as informações do cliente são legais e os dados do cliente permissões desfrutadas, etc.
O programa cliente para este processo é o seguinte:
strKey:=myRemoteSever.GetKey();
{Chamando a interface do servidor para obter uma chave aleatória}
NomeUsuário:=Ency(strNomeUsuário
strKey);
{Criptografe o nome de usuário, Ency() é o algoritmo de criptografia}
Senha:=Ency(strSenha
strKey);
{Criptografar senha de login}
Se meuRemoteServer.LogIn(UserName
Senha) e depois {Login}
Começar
{processo}
Fim;
O processo de login do lado do servidor LogIn() é o seguinte:
strNomeUsuário:=DeEncy(NomeUsuário
strKey);
{Descriptografar nome de usuário, DeEncy() é o algoritmo de descriptografia}
strSenha:=DeEncy(Senha
strKey);
{Descriptografar senha de login}
{Consultar banco de dados}
se (passar) então
Resultado:=verdadeiro
Outro
Resultado:=falso;
Deve-se observar que StrKey deve ser definido como uma variável global tanto no programa servidor quanto no programa cliente.
Para evitar que a tabela de informações do cliente seja aberta fora do programa e, assim, vaze a senha, certas medidas de criptografia podem ser implementadas nas informações do cliente. Por exemplo, uma senha pode ser adicionada à tabela PARADOX e o programa do servidor fornece primeiro. a Senha ao acessar a tabela de informações do cliente.
3. Transmissão de dados
Em aplicações de rede, alguns dados confidenciais devem ser criptografados quando transmitidos pela Internet. O mecanismo MIDAS do Delphi fornece uma maneira de criptografar dados. Ele pode criptografar alguns campos antes de os dados serem transmitidos ao cliente. Ele também pode descriptografar os campos correspondentes dos dados do cliente após receber a solicitação de atualização de dados do cliente antes de enviá-los ao banco de dados. . Faça uma atualização. Para atingir esses objetivos, você pode adicionar um objeto TPRovider ou TdataSetProvider ao módulo de dados remoto do programa servidor e definir a propriedade DataSet deste objeto para o conjunto de dados a ser processado. Adicione o seguinte código ao evento OnGetData do Tprovider:
com DataSet faça
começar
enquanto não EOF faça
começar
Editar;
SensitiveData.AsString :=
Ency(SensitiveData.AsString
strKey);
{Criptografar dados confidenciais}
Publicar;
Próximo;
fim;
fim;
O código acima pode criptografar dados confidenciais antes de enviá-los ao programa cliente.
Da mesma forma, adicionar algum código de processamento ao evento OnUpdateData do Tprovider pode descriptografar os dados enviados pelo cliente.
O acima exposto apenas introduz os princípios gerais de implementação de medidas de segurança de programas de rede. Nesta base, outras medidas de confidencialidade podem ser adicionadas para obter melhores efeitos de confidencialidade. Por exemplo, um programa cliente pode usar dispositivos de hardware auxiliares específicos para aumentar a segurança. Na aplicação de cartão inteligente, o programa cliente não apenas exige que o usuário insira o nome de usuário e a senha ao fazer login, o programa também verifica o tipo e o conteúdo específico do cartão IC no leitor IC. a senha vazou, ninguém fará login na representação. É claro que nenhuma medida de segurança é absolutamente segura As medidas de segurança devem ter um sistema de confidencialidade rigoroso e um elevado grau de consciência da confidencialidade por parte dos utilizadores para manter verdadeiramente a confidencialidade.