Como podemos restringir o acesso a um serviço web a computadores clientes específicos?

Como podemos restringir o acesso a um serviço web a computadores clientes específicos?

Temos um aplicativo web (Apache/PHP) que atualmente usa autenticação de nome de usuário/senha e pode ser acessado de qualquer lugar. Possui SSL do lado do servidor habilitado.

Nosso programa cliente é uma versão do FireFox que modificamos e renomeamos. Este cliente Firefox modificado destina-se apenas a conectar-se ao nosso servidor de aplicativos da web. Os usuários devem usar este programa cliente para se conectar ao serviço da web.

Além da autenticação do usuário, gostaríamos de bloquear o acesso no nível do servidor a qualquer pessoa que não esteja usando nosso programa cliente*. Portanto, se um usuário digitar um URI usando um navegador normal, ele será totalmente negado.

Para conseguir isso, o programa cliente precisa se identificar para o servidor para que o servidor saiba que nosso programa cliente está sendo usado e não um navegador da web ou bot.

*O verdadeiro objetivo é ter certeza de que são funcionários autorizados da nossa empresa antes de poder tentar um login, incorporar este "comprovante de emprego" no programa do cliente parece ser a maneira mais fácil de fazer isso, já que o aplicativo é dado apenas para pessoas que precisam usá-lo.

Até agora, tive algumas idéias sobre como fazer isso.

1.) Incorpore um token no aplicativo cliente que é enviado quando o cliente faz um login (o login é gerenciado por uma interface Chrome/XUL). Isso não bloquearia no nível do servidor, apenas no nível do aplicativo. A chave pode ser roubada tão facilmente quanto uma senha, mas não pode ser adivinhada pela força bruta tão facilmente, pois pode ter qualquer tamanho ou complexidade.

1a.) Adicione um parâmetro tolken especial ao cabeçalho do navegador do cliente em todas as solicitações. Isso é mais parecido com segurança através da obscuridade, mas certamente pode desacelerar um invasor que tenta usar senhas de força bruta se o login sempre falhar (mesmo com a senha correta) quando a string mágica estiver faltando na solicitação.

2.) Incorpore um certificado SSL de cliente no programa cliente. Parece que pode ser uma boa solução, mas uma boa documentação sobre SSL do lado do cliente é quase inexistente. NÃO gostaríamos de assinar um certificado para cada usuário, nem gostaríamos que o usuário tivesse que criar um certificado ou se incomodar com diálogos de segurança. A chave privada teria que ser incorporada ao navegador e seria uma chave compartilhada entre todos os programas clientes e distribuída por instalação em nosso navegador personalizado.

3.) Verifique a string do agente do usuário. Acho que o Apache pode restringir com base nisso. Mas parece, na melhor das hipóteses, uma medida fraca. Eu provavelmente faria isso além de outras medidas.

Espero uma ideia melhor de como fazer isso?

Responder1

Incluir um certificado SSL de cliente com o navegador modificado seria mais fácil e provavelmente mais seguro.

Se você estiver usando a mesma chave para todos, perderá muitas das vantagens dos certificados de cliente, mas é melhor do que verificar o useragent. E presumo que você ainda precisará de um nome de usuário e senha para fazer login.

Responder2

Você já pensou em VPN? Isso parece exatamente o que você realmente deseja.

informação relacionada