Este 'How To' tem como objetivo apresentar e explicar a validação de clientes RPC como ferramenta para reforçar a segurança na execução de chamadas via RPC.
Validação de Clientes RPC
A validação de clientes RPC é uma medida opcional de segurança implementada para permitir que o servidor de uma chamada RPC verifique se o solicitante pode ou não executar chamadas RPC.
Através da execução de uma função AdvPL, definida pelo usuário e indicada no arquivo de configurações do servidor RPC, é possível criar uma política de permissões de execução de funções via RPC de maneira flexível.
A medida de segurança é opcional pois depende da configuração ou não da função de validação. No entanto, uma vez configurada, a validação será executada de maneira obrigatória e a cada chamada de método RPC por parte do cliente, até que o servidor seja reiniciado com validação desabilitada.
Configuração da Função de Validação
A função de validação de clientes RPC é indicada no arquivo de configuração do servidor RPC na seção RPC, chave OnCall.
Caso configurada, habilita a validação de clientes RPC; caso não configurada, o cliente RPC é considerado válido por padrão.
Localização da Função de Validação
A função definida pelo usuário deverá estar no mesmo ambiente (environment) a ser utilizado para execução das tarefas (funções) RPC no servidor, conforme instância da classe TRpc em uso.
Assinatura da Função de Validação
A função de validação de clientes RPC deverá receber 3 (três) strings de caracteres, definindo o IP do cliente RPC, o nome da máquina do cliente RPC e o ambiente (environment) no servidor RPC onde a função está localizada.
User Function SomeFunc( _cClientIP, _cClientHostName, _cServerEnv )
Local lResult := .F.
Return lResult
Sintaxe
<SomeFunc>( < _cClientIP >, < _cClientHostName >, < _cServerEnv > )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
_cClientIP | caractere | IP do cliente RPC. | X |
|
_cClientHostName | caractere | Nome da máquina (host name) do cliente RPC. | X |
|
_cServerEnv | caractere | Ambiente (environment) no servidor RPC onde a função está localizada. | X |
|
Retorno
Nome | Tipo | Descrição |
---|---|---|
cRet | caractere | Retorna uma cadeia de caracteres criptografada. |
Observações
- Página com a tabela ASCII: http://www.ascii-code.com/
- Página online para criptografar RC4: http://www.fyneworks.com/encryption/rc4-encryption/
Exemplos
User Function rc4crypt_exemplo() local cRet local cOriginal // resultado ASCII em hex: "55AB394524" cRet = rc4crypt( "abcde" ,"123456789", .T.) conout("Criptografado em ascii = " + cRet) cRet = rc4crypt( "abcde" ,"123456789", .F.) conout("Criptografado em string = " + cRet) // processo inverso cOriginal = rc4crypt(cRet, "123456789", .F.) conout("String original = " + cOriginal) // converte de ASCII em hex para string cRet = chr(CTON('55', 16)) cRet += chr(CTON('AB', 16)) cRet += chr(CTON('39', 16)) cRet += chr(CTON('45', 16)) cRet += chr(CTON('24', 16)) conout ("resultado em hex convertido = " +cRet) cOriginal = rc4crypt(cRet, "123456789", .F.) conout("String original = " + cOriginal) Return User Function input_ascii_test() local cRet local cOriginal // resultado ASCII em hex: "55AB394524" cRet = rc4crypt( "abcde" ,"123456789", .T.) conout("Criptografado em ascii = " + cRet) cOriginal = rc4crypt(cRet, "123456789", .F., .T.) conout("String original = " + cOriginal) Return
Resultado da Função de Validação
Caso bem sucedida, a função de validação retorna o valor lógico resultante da validação do cliente RPC, definido pelo usuário no corpo da função de validação.
Caso mal sucedida, a função de validação retorna falso (.F.), o cliente RPC é considerado como não-válido e a mensagem de erro "Invalid RPC Client..." é retornada ao cliente e logada.
Período de Latência de uma Validação
A validação do cliente RPC é executada a cada chamada de método RPC por parte do cliente, até que o servidor seja reiniciado com validação desabilitada.
No entanto, a execução ou não da função de validação de clientes RPC, quando de uma validação, depende do resultado prévio da função de validação e de quando a validação ocorre em relação ao seu período de latência.
Caso bem sucedida, a função de validação somente será executada novamente após o período de 300 segundos (5 minutos), independente do resultado da validação do cliente RPC.
Durante este período, o resultado da validação do cliente RPC retornado será o mesmo.
Após o período de latência, o resultado da validação expira, e a próxima chamada de método RPC por parte do cliente executará a função de validação novamente e o processo se repete.
Caso mal sucedida, a função de validação será executada novamente quando da chamada de método RPC por parte do cliente.
Resultado da Validação
O resultado da validação de um cliente RPC é um valor lógico que depende do resultado bem sucedido da função de validação de clientes RPC.
Caso válido, o cliente RPC estará habilidato a executar chamadas RPC durante o período de latência de sua validação.
Caso não-valido, o cliente RPC não estará habilitado a executar chamadas RPC e a função de validação RPC será executada novamente na próxima requisição RPC do cliente.